제출 #1159468

#제출 시각아이디문제언어결과실행 시간메모리
1159468KhoaDuyFeast (NOI19_feast)C++17
100 / 100
57 ms10556 KiB
#include<bits/stdc++.h> using namespace std; #define endl '\n' #define int long long int group(int x){ if(x>=0){ return 1; } return 0; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n,q=1; cin >> n; int a[n+1]; while(q--){ int ope=2; //cin >> ope; if(ope==1){ int i,v; cin >> i >> v; a[i]=v; } else{ int l=1,r=n,k; cin >> k; for(int i=1;i<=n;i++){ cin >> a[i]; } vector<int> b; for(int i=l;i<=r;i++){ int sum=0; int j; for(j=i;j<=r;j++){ if(j>i&&group(a[j])!=group(a[j-1])){ break; } sum+=a[j]; } i=j-1; b.push_back(sum); } if(b[0]<0){ b.erase(b.begin()); } if(b.empty()){ cout << 0 << endl; continue; } if(b.back()<0){ b.pop_back(); } if(b.empty()){ cout << 0 << endl; continue; } int ans=0,cnt=0; int le[b.size()],ri[b.size()]; bool del[b.size()]={false}; priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> pq; for(int i=0;i<b.size();i++){ le[i]=i-1; ri[i]=i+1; pq.push({abs(b[i]),i}); } for(int i=0;i<b.size();i+=2){ ans+=b[i]; cnt++; } if(cnt<=k){ cout << ans << endl; continue; } int temp=0; for(int i=4;i<b.size();i++){ temp+=b[i]; } while(cnt>k&&!pq.empty()){ int idx=pq.top().second,val=pq.top().first; pq.pop(); if(del[idx]){ continue; } cnt--; ans-=val; int nxtle=-1,nxtri=b.size(); if(le[idx]>=0&&!del[le[idx]]){ b[idx]+=b[le[idx]]; nxtle=le[le[idx]]; del[le[idx]]=true; } if(ri[idx]<b.size()&&!del[ri[idx]]){ b[idx]+=b[ri[idx]]; nxtri=ri[ri[idx]]; del[ri[idx]]=true; } bool border=false; if(le[idx]<0||ri[idx]>=b.size()){ border=true; } if(nxtle>=0){ if(!border){ ri[nxtle]=idx; } else{ ri[nxtle]=b.size(); } } if(nxtri<b.size()){ if(!border){ le[nxtri]=idx; } else{ le[nxtri]=-1; } } le[idx]=nxtle,ri[idx]=nxtri; if(!border){ pq.push({abs(b[idx]),idx}); } } if(cnt>k){ cout << 0 << endl; continue; } cout << ans << 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...