Submission #57959

#TimeUsernameProblemLanguageResultExecution timeMemory
57959zetapiWall (IOI14_wall)C++14
0 / 100
3 ms616 KiB
#include "wall.h" #include "bits/stdc++.h" using namespace std; #define pb push_back #define mp make_pair #define ll long long #define itr ::iterator typedef pair<int,int> pii; const int MAX=5e6; struct data { int Min; int Max; } Seg[MAX]; void Update(int low,int high,int node,int qlow,int qhigh,pii delta,int CurMin,int CurMax) { if(low>high or qlow>qhigh or qhigh<low or qlow>high) return ; CurMin=max(CurMin,Seg[node].Min); CurMax=min(CurMax,Seg[node].Max); Seg[node].Min=CurMin; Seg[node].Max=CurMax; if(low>=qlow and high<=qhigh) { if(delta.first==1) { if(Seg[node].Min>delta.first) return ; Seg[node].Min=delta.first; Seg[node].Max=max(Seg[node].Max,Seg[node].Min); } else { if(Seg[node].Max<delta.first) return ; Seg[node].Max=delta.first; Seg[node].Min=min(Seg[node].Min,Seg[node].Max); } return ; } int mid=(low+high)/2; Update(low,mid,2*node,qlow,qhigh,delta,CurMin,CurMax); Update(mid+1,high,2*node+1,qlow,qhigh,delta,CurMin,CurMax); return ; } int query(int low,int high,int node,int X,int CurMin,int CurMax) { CurMin=max(CurMin,Seg[node].Min); CurMax=min(CurMax,Seg[node].Max); if(low==high) return CurMin; int mid=(low+high)/2; if(X>=low and X<=mid) return query(low,mid,2*node,X,CurMin,CurMax); else return query(mid+1,high,2*node+1,X,CurMin,CurMax); } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]) { int N=n,K=k; for(int A=0;A<K;A++) Update(1,N,1,left[A]+1,right[A]+1,mp(op[A],height[A]),0,MAX); for(int A=0;A<N;A++) finalHeight[A]=query(1,N,1,A+1,0,MAX); return; } /*signed main() { ios_base::sync_with_stdio(false); 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...