제출 #751281

#제출 시각아이디문제언어결과실행 시간메모리
751281aminGrowing Trees (BOI11_grow)C++14
40 / 100
163 ms3304 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long int seg[2000000]; int laz[2000000]; int a[2000003]; int z; int b[1000003]; int ans=0; int n; void merg(int v,int v1,int v2) { seg[v]=max(seg[v1],seg[v2]); } void build(int v,int tl,int tr) { if(tl==tr) { seg[v]=a[tl]; return ; } int tm=(tl+tr)/2; build(v*2,tl,tm); build(v*2+1,tm+1,tr); merg(v,v*2,v*2+1); } void push(int v) { laz[v*2]+=laz[v]; seg[v*2]+=laz[v]; seg[v*2+1]+=laz[v]; laz[v*2+1]+=laz[v]; laz[v]=0; } void update(int v,int tl,int tr,int l,int r) { if(l>r) return ; if(tl==l&&tr==r) { seg[v]++; laz[v]++; return ; } push(v); int tm=(tl+tr)>>1; update(v*2,tl,tm,l,min(r,tm)); update(v*2+1,tm+1,tr,max(tm+1,l),r); merg(v,v*2,v*2+1); } int get(int v,int tl,int tr,int val) { //cout<<tl<<' '<<tr<<endl; /* if(val<tl||val>tr) return 1000000;*/ // cout<<tl<<' '<<tr<<endl; if(tl==tr) { //cout<<seg[v]<<endl; return tl; } push(v); int tm=(tl+tr)/2; if(seg[v*2]>=val) { return get(v*2,tl,tm,val); }else return get(v*2+1,tm+1,tr,val); } int get1(int v,int tl,int tr,int pos) { // cout<<tl<<' '<<tr<<' '<<pos<<endl; if(pos<tl||pos>tr) return n; if(tl==tr) return seg[v]; int tm=(tl+tr)>>1; push(v); return min(get1(v*2,tl,tm,pos),get1(v*2+1,tm+1,tr,pos)); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen("balancing.in","r",stdin); // freopen("balancing.out","w",stdout); cin>>n; int q; cin>>q; for(int i=0;i<n;i++) { cin>>a[i]; } sort(a,a+n); a[n]=2e9; build(1,0,n); while(q--) { char c; cin>>c; int co,mi; cin>>mi>>co; swap(mi,co); if(c=='F') { // co--; int pos=get(1,0,n,mi); int en=pos+co-1; en=min(en,n-1); if(en==n-1) { update(1,0,n,pos,n-1); continue; } int val=get1(1,0,n,en); int st=get(1,0,n,val); int e=get(1,0,n,val+1); update(1,0,n,pos,st-1); // cout<<pos<<' '<<st-1<<' '<<e-en+st-1<<' '<<e-1<<endl; update(1,0,n,e-(en-st+1),e-1); /*for(int y=0;y<n;y++) { cout<<get1(1,0,n,y)<<' '; } cout<<endl;*/ }else { swap(mi,co); // cout<<get(1,0,n,co+1)<<get(1,0,n,mi); // cout<<mi<<' '<<co+1<<endl; cout<<get(1,0,n,co+1)-get(1,0,n,mi)<<endl; } } }
#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...