Submission #901981

#TimeUsernameProblemLanguageResultExecution timeMemory
901981MuhammadSaramWall (IOI14_wall)C++17
61 / 100
3050 ms248448 KiB
#include <bits/stdc++.h> using namespace std; const int M = 5e5, inf = 1e6; int seg[2][M*4],k; void modify(int ty,int p,int x,int v=1,int s=0,int e=k) { if (s+1==e) { seg[ty][v]=x; return; } int mid=(s+e)/2,lc=v*2,rc=v*2+1; if (p<mid) modify(ty,p,x,lc,s,mid); else modify(ty,p,x,rc,mid,e); if (ty) seg[ty][v]=min(seg[ty][lc],seg[ty][rc]); else seg[ty][v]=max(seg[ty][lc],seg[ty][rc]); } int get(int ty,int l,int r,int v=1,int s=0,int e=k) { if (r<=s or e<=l) return ty*inf; if (l<=s and e<=r) return seg[ty][v]; int mid=(s+e)/2,lc=v*2,rc=v*2+1; if (ty) return min(get(ty,l,r,lc,s,mid),get(ty,l,r,rc,mid,e)); return max(get(ty,l,r,lc,s,mid),get(ty,l,r,rc,mid,e)); } void buildWall(int n, int K, int op[], int left[], int right[], int height[], int finalHeight[]) { k=K; for (int i=0;i<k;i++) for (int j=0;j<2;j++) modify(j,i,j*inf); vector<pair<int,int>> st[2][n],en[2][n]; for (int i=0;i<k;i++) { st[op[i]-1][left[i]].push_back({i,height[i]}); en[op[i]-1][right[i]].push_back({i,height[i]}); } for (int i=0;i<n;i++) { for (int j=0;j<2;j++) for (auto x:st[j][i]) modify(j,x.first,x.second); int s=-1,e=k; while (s+1<e) { int mid=(s+e)/2; int x=get(0,mid,k),y=get(1,mid,k); if (x>y) s=mid; else e=mid; } if (s==-1) finalHeight[i]=get(0,0,k); else { int x=get(0,s,k),y=get(1,s,k); int x1=get(0,s+1,k),y1=get(1,s+1,k); if (x==x1) finalHeight[i]=x; else finalHeight[i]=y; } for (int j=0;j<2;j++) for (auto x:en[j][i]) modify(j,x.first,inf*j); } }

Compilation message (stderr)

wall.cpp: In function 'void buildWall(int, int, int*, int*, int*, int*, int*)':
wall.cpp:71:24: warning: unused variable 'y1' [-Wunused-variable]
   71 |    int x1=get(0,s+1,k),y1=get(1,s+1,k);
      |                        ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...