Submission #109996

#TimeUsernameProblemLanguageResultExecution timeMemory
109996boatinw99Wall (IOI14_wall)C++11
100 / 100
1046 ms114040 KiB
#include "wall.h" #include<bits/stdc++.h> using namespace std ; typedef pair<int,int> pii ; #define mid (l+r>>1) #define fi first #define se second const int N = 2e6+9 ,inf = 2e9; int st[N<<2],ans[N]; pii lazy[N<<2]; void operate(pii &a,pii b) { if(b.se<=a.fi) { a={b.se,b.se}; } else if(a.se<=b.fi) { a={b.fi,b.fi}; } else { a.fi=max(a.fi,b.fi); a.se=min(a.se,b.se); } } void push(int l,int r,int m) { ///fi -> min ||| se -> max if(lazy[m].fi==-inf&&lazy[m].se==inf)return ; //printf("bbb l=%d r=%d (%d %d) \n",l,r,lazy[m].fi,lazy[m].se); st[m]=max(st[m],lazy[m].fi); st[m]=min(st[m],lazy[m].se); if(l<r) { operate(lazy[m<<1],lazy[m]); operate(lazy[m<<1|1],lazy[m]); } lazy[m]={-inf,inf}; } void update(int l,int r,int x,int y,pii nw,int m) { push(l,r,m); if(r<x||l>y)return ; if(l>=x&&r<=y) { lazy[m]=nw; //printf("aaa l=%d r=%d (%d %d) \n",l,r,lazy[m].fi,lazy[m].se); push(l,r,m); return ; } update(l,mid,x,y,nw,m<<1); update(mid+1,r,x,y,nw,m<<1|1); } void getans(int l,int r,int m) { push(l,r,m); if(l==r) { ans[l]=st[m]; return ; } getans(l,mid,m<<1); getans(mid+1,r,m<<1|1); } void buildWall(int n,int k,int op[],int left[], int right[],int height[],int finalHeight[]) { for(int i=0;i<N*4;i++)lazy[i]={-inf,inf}; for(int i=0;i<k;i++) { int l = left[i] , r = right[i] ; if(op[i]==1)update(0,n-1,l,r,{height[i],inf},1); else update(0,n-1,l,r,{-inf,height[i]},1); } getans(0,n-1,1); for(int i=0;i<n;i++)finalHeight[i]=ans[i]; return ; }

Compilation message (stderr)

wall.cpp: In function 'void update(int, int, int, int, pii, int)':
wall.cpp:5:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
 #define mid (l+r>>1)
              ~^~
wall.cpp:52:14: note: in expansion of macro 'mid'
     update(l,mid,x,y,nw,m<<1);
              ^~~
wall.cpp:5:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
 #define mid (l+r>>1)
              ~^~
wall.cpp:53:12: note: in expansion of macro 'mid'
     update(mid+1,r,x,y,nw,m<<1|1);
            ^~~
wall.cpp: In function 'void getans(int, int, int)':
wall.cpp:5:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
 #define mid (l+r>>1)
              ~^~
wall.cpp:63:14: note: in expansion of macro 'mid'
     getans(l,mid,m<<1);
              ^~~
wall.cpp:5:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
 #define mid (l+r>>1)
              ~^~
wall.cpp:64:12: note: in expansion of macro 'mid'
     getans(mid+1,r,m<<1|1);
            ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...