Submission #1092601

#TimeUsernameProblemLanguageResultExecution timeMemory
1092601damoonPyramid Base (IOI08_pyramid_base)C++14
63 / 100
5074 ms173140 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long typedef pair<int,int> pii; typedef pair<int,pii> pip; typedef pair<pii,int> ppi; #define f first #define s second #define all(x) x.begin(),x.end() #define unicorn(x) x.resize(unique(x.begin(),x.end())-x.begin()) #define pb(x) push_back(x); #define pp() pop_back(); #define lc 2*id+0 #define rc 2*id+1 const int LC = 1e6+10, L = 4e5+10; const ll inf = 1e10; int n,m,p,b; struct obs{ int l,r,c; obs(int a,int b,int pr){ l = a; r = b; c = pr; } }; vector<obs> add[LC],er[LC]; random_device device; default_random_engine rng(device()); #define randt(a,b) uniform_int_distribution<int64_t>(a,b)(rng) void pr(int* vv,int l,int r){for(int i=l;i<r;i++){cout<<vv[i]<<" ";}cout<<endl;} void prv(vector<int> vv){for(auto i:vv){cout<<i<<" ";}cout<<endl;} void prl(long long* vv,int l,int r){for(int i=l;i<r;i++){cout<<vv[i]<<" ";}cout<<endl;} void prvl(vector<long long> vv){for(auto i:vv){cout<<i<<" ";}cout<<endl;} void prp(pii* vv,int l,int r){for(int i=l;i<r;i++){cout<<i<<": "<<vv[i].f<<" , "<<vv[i].s<<" / ";}cout<<endl;} struct node{ ll lazy, mn; node(){ lazy = mn = 0; } }t[LC*6]; struct sagi{ inline void spread(int id){ t[lc].lazy += t[id].lazy; t[rc].lazy += t[id].lazy; t[id].mn += t[id].lazy; t[id].lazy = 0; } inline void update(int id,int l,int r,int l2,int r2,ll x){ spread(id); if(l==l2 and r==r2){ t[id].lazy += x; return; } int mid = (l2+r2)>>1; if(l<mid) update(lc,l,min(r,mid),l2,mid,x); if(r>mid) update(rc,max(l,mid),r,mid,r2,x); spread(lc); spread(rc); t[id].mn = min(t[lc].mn, t[rc].mn); } inline ll get(int id,int l,int r,int l2,int r2){ spread(id); if(l==l2 and r==r2){ return t[id].mn; } int mid = (l2+r2)>>1; ll ans = inf; if(l<mid) ans = min(ans, get(lc,l,min(r,mid),l2,mid)); if(r>mid) ans = min(ans, get(rc,max(l,mid),r,mid,r2)); return ans; } }; int main(){ //ofstream cout ("out.txt"); //ifstream cin ("in.txt"); ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); //cin>>n>>m>>b>>p; scanf("%d %d",&n,&m); scanf("%d",&b); scanf("%d",&p); for(int i=0;i<p;i++){ int x1,y1,x2,y2,pr; //cin>>x1>>y1>>x2>>y2>>pr; scanf("%d %d %d %d %d",&x1,&y1,&x2,&y2,&pr); obs x(y1,y2,pr); add[x1].pb(x); er[x2].pb(x); } int l=0,r=1e6+1; while(r-l>1){ int mid = (l+r)>>1; if(mid > n or mid > m){ r = mid; continue; } //cout<<"mid: "<<mid<<endl; sagi seg; for(int i=1;i<LC*6;i++){ t[i].lazy = t[i].mn = 0; } seg.update(1,1,mid,1,m+1,inf); ll ans = inf; for(int i=1;i<=n;i++){ //cout<<"ev: "<<i<<endl; if(i>mid){ ans = min(ans,t[1].mn); } for(auto j:add[i]){ //cout<<" add: "<<j.l<<" "<<j.r<<" "<<j.c<<" / "<<max(j.l,mid)<<" "<<min(j.r+mid,m+1)<<endl; seg.update(1,max(j.l,mid),min(j.r+mid,m+1),1,m+1,j.c); } for(auto j:er[max(i-mid,0)]){ //cout<<" ere: "<<j.l<<" "<<j.r<<" "<<j.c<<endl; seg.update(1,max(j.l,mid),min(j.r+mid,m+1),1,m+1,-j.c); } if(i>mid){ ans = min(ans,t[1].mn); } //cout<<" res: "<<seg.t[1].mn<<endl; //cout<<"= = = = = = = = = = = "<<endl; } //cout<<"l,r: "<<l<<","<<r<<" / mid: "<<mid<<" / ans: "<<ans<<endl; if(ans <= b) l = mid; else r = mid; //cout<<"---------------------"<<endl; } cout<<l<<endl; }

Compilation message (stderr)

pyramid_base.cpp: In function 'int main()':
pyramid_base.cpp:99:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   99 |     scanf("%d %d",&n,&m);
      |     ~~~~~^~~~~~~~~~~~~~~
pyramid_base.cpp:100:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  100 |     scanf("%d",&b);
      |     ~~~~~^~~~~~~~~
pyramid_base.cpp:101:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  101 |     scanf("%d",&p);
      |     ~~~~~^~~~~~~~~
pyramid_base.cpp:105:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  105 |         scanf("%d %d %d %d %d",&x1,&y1,&x2,&y2,&pr);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...