제출 #480645

#제출 시각아이디문제언어결과실행 시간메모리
480645Haidara벽 (IOI14_wall)C++17
0 / 100
155 ms20764 KiB
#include<bits/stdc++.h> #include<wall.h> #define v(i) vector< i > using namespace std; const int maxn=200200; int n; struct node { int mx,mn,lazy,go; node():mx(0),mn(0),go(0){} }st[maxn*4]; void pull(int inx,int l,int r,int val=0) { if(val>0) { st[inx].mn=val; st[inx].mx=max(st[inx].mx,val); } else if(val<0) { st[inx].mx=val; st[inx].mn=min(val,st[inx].mn); } if(l!=r) { st[inx*2].go=1; st[inx*2+1].go=1; st[inx*2].mn=max(st[inx].mn,min(st[inx*2].mn,st[inx].mx)); st[inx*2].mx=min(st[inx].mx,max(st[inx*2].mx,st[inx].mn)); st[inx*2+1].mn=max(st[inx].mn,min(st[inx*2+1].mn,st[inx].mx)); st[inx*2+1].mx=min(st[inx].mx,max(st[inx*2+1].mx,st[inx].mn)); } } void push_up(int inx) { } void add(int ql,int qr,int val,int l=0,int r=n-1,int inx=1) { pull(inx,l,r); if(ql<=l&&r<=qr) { pull(inx,l,r,val); return ; } if(ql>r||l>qr) return ; int mid=l+(r-l)/2; add(ql,qr,val,l,mid,inx*2); add(ql,qr,val,mid+1,r,inx*2+1); } void del(int ql,int qr,int val,int l=0,int r=n-1,int inx=1) { pull(inx,l,r); if(ql<=l&&r<=qr) { pull(inx,l,r,-val); return ; } if(ql>r||l>qr) return ; int mid=l+(r-l)/2; del(ql,qr,val,l,mid,inx*2); del(ql,qr,val,mid+1,r,inx*2+1); } int query(int pos,int l=0,int r=n-1,int inx=1) { pull(inx,l,r); if(l==r) return st[inx].mn; int mid=l+(r-l)/2; if(pos<=mid) return query(pos,l,mid,inx*2); else return query(pos,mid+1,r,inx*2+1); } void buildWall(int N, int k, int op[], int left[], int right[], int height[], int finalHeight[]) { n=N; for(int i=0;i<k;i++) { if(op[i]&1) add(left[i],right[i],height[i]); else del(left[i],right[i],height[i]); } for(int i=0;i<n;i++) finalHeight[i]=query(i); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...