Submission #1146552

#TimeUsernameProblemLanguageResultExecution timeMemory
1146552KhoaDuyFeast (NOI19_feast)C++20
12 / 100
52 ms10748 KiB
#include<bits/stdc++.h> using namespace std; #define endl '\n' #define int long long signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n,q; cin >> n; int a[n+1]; 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(a[i]*a[j]<0){ break; } sum+=a[j]; } i=j-1; if(sum<=0&&b.empty()){ continue; } b.push_back(sum); } if(b.empty()){ cout << 0 << endl; return 0; } if(b.back()<=0){ b.pop_back(); } 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++){ if(b[i]>0){ cnt++; ans+=b[i]; } le[i]=i-1; ri[i]=i+1; pq.push({abs(b[i]),i}); } if(cnt<=k){ cout << ans << endl; return 0; } while(cnt>k){ 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){ b[idx]+=b[le[idx]]; nxtle=le[le[idx]]; del[le[idx]]=true; } if(ri[idx]<b.size()){ b[idx]+=b[ri[idx]]; nxtri=ri[ri[idx]]; del[ri[idx]]=true; } le[idx]=nxtle,ri[idx]=nxtri; pq.push({abs(b[idx]),idx}); } 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...