Submission #390968

#TimeUsernameProblemLanguageResultExecution timeMemory
390968IloveNPyramid Base (IOI08_pyramid_base)C++14
70 / 100
5054 ms102692 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int,int> #define pll pair<ll,ll> #define fi first #define se second #define mp make_pair #define pb push_back #define eb emplace_back #define all(vr) vr.begin(),vr.end() #define vi vector<int> #define vll vector<ll> #define ui unsigned int const int N=1e6+10; struct segment_tree { int it[N*4],lazy[N*4]; int n; void down(int id) { int x=lazy[id]; lazy[id]=0; it[id*2]+=x; lazy[id*2]+=x; it[id*2+1]+=x; lazy[id*2+1]+=x; } void update(int id,int l,int r,int u,int v,int x) { if (l>v || r<u) return; if (u<=l && r<=v) { it[id]+=x; lazy[id]+=x; return; } if (lazy[id]) down(id); int mid=(l+r)/2; update(id*2,l,mid,u,v,x); update(id*2+1,mid+1,r,u,v,x); it[id]=min(it[id*2],it[id*2+1]); } void init(int x) { n=x; memset(it,0,sizeof(it)); memset(lazy,0,sizeof(lazy)); } void upd(int u,int v,int x) { update(1,1,n,u,v,x);} ll get() { return it[1];} } seg; struct obs{int x1,x2,y1,y2,c;}; obs a[N]; int n,m,B,p; struct event{int l,r,x;}; vector<event> vt[N]; bool check(int l) { for (int i=1;i<=m;i++) vt[i].clear(); for (int i=1;i<=p;i++) { int x1=max(a[i].x1-l+1,1); int y1=max(a[i].y1-l+1,1); int x2=min(a[i].x2,m-l+1); int y2=min(a[i].y2,n-l+1); if (x1>x2 || y1>y2) continue; int c=a[i].c; vt[x1].pb({y1,y2,c}); vt[x2+1].pb({y1,y2,-c}); } seg.init(n-l+1); for (int i=1;i<=m-l+1;i++) { for (event e : vt[i]) seg.upd(e.l,e.r,e.x); if (seg.get()<=B) return true; } return false; } int main() { //freopen("ss.inp","r",stdin); ios::sync_with_stdio(false); cin.tie(0); cin>>m>>n>>B>>p; for (int i=1;i<=p;i++) cin>>a[i].x1>>a[i].y1>>a[i].x2>>a[i].y2>>a[i].c,a[i].c=min(a[i].c,B+1); int l=1,r=min(m,n),ans=0; while (l<=r) { int mid=(l+r)/2; if (check(mid)) ans=mid,l=mid+1; else r=mid-1; } cout<<ans; return 0; }
#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...