제출 #947976

#제출 시각아이디문제언어결과실행 시간메모리
947976yeediot휴가 (IOI14_holiday)C++14
100 / 100
616 ms7108 KiB
#include<bits/stdc++.h> using namespace std; #define sz(x) (int)(x.size()) #define chmin(x,y) x=min(x,y) #define chmax(x,y) x=max(x,y) #ifdef local void setio(){freopen("/Users/iantsai/Library/Mobile Documents/com~apple~CloudDocs/cpp/Empty.md","r",stdin);} #else void setio(){} #endif const long long mxn=1e5+5; multiset<long long>bg,sm; long long n,st,d,L,R; long long cur,v[mxn]; void sir(long l,long r,long k){ while(L>l){ bg.insert(v[--L]); cur+=v[L]; } while(R<r){ bg.insert(v[++R]); cur+=v[R]; } while(L<l){ if(bg.find(v[L])!=bg.end()){ cur-=v[L]; bg.erase(bg.find(v[L])); } else{ sm.erase(sm.find(v[L])); } L++; } while(R>r){ if(bg.find(v[R])!=bg.end()){ cur-=v[R]; bg.erase(bg.find(v[R])); } else{ sm.erase(sm.find(v[R])); } R--; } while(sz(bg)>k){ cur-=*bg.begin(); sm.insert(*bg.begin()); bg.erase(bg.begin()); } while(sz(bg)<k){ cur+=*prev(sm.end()); bg.insert(*prev(sm.end())); sm.erase(prev(sm.end())); } } long long ans; void solve(long long l,long long r,long long ql,long long qr){ //cerr<<l<<' '<<r<<' '<<ql<<' '<<qr<<'\n'; if(l>r)return; long long mm=(l+r)/2; long long mx=0; long long best=ql; for(long long i=qr;i>=ql;i--){ long long x=min(mm-i+1,d-(min(st-i,mm-st)+mm-i)); //cerr<<x<<'\n'; if(x<0)break; sir(i,mm,x); if(cur>=mx){ best=i; mx=cur; } } chmax(ans,mx); solve(l,mm-1,ql,best); solve(mm+1,r,best,qr); } long long findMaxAttraction(int N,int ST,int D,int a[]){ n=N,st=ST,d=D,cur=0,L=0,R=n-1; for(long long i=0;i<n;i++){ v[i]=a[i]; bg.insert(v[i]); cur+=v[i]; } //solve(0,st,st,n-1); solve(st,n-1,0,st); return ans; } #ifdef local int main(){ setio(); int a,b,c; cin>>a>>b>>c; int x[n]; for(int i=0;i<a;i++){ cin>>x[i]; } cout<<findMaxAttraction(a,b,c,x)<<'\n'; } #else #endif /* input: */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...