제출 #1313673

#제출 시각아이디문제언어결과실행 시간메모리
1313673spicytomatoFeast (NOI19_feast)C++20
4 / 100
44 ms19364 KiB
#include <bits/stdc++.h> using namespace std; long long n,k,x,ans=0,cnt=0,f=1,lnei[600001]={0},rnei[600001]={0},l[600001]={0},r[600001]={0},vld[600001]={0},sum[600001]={0}; vector<long long> a,val; priority_queue<pair<long long,int> > q; void solve() { a.push_back(0); val.push_back(0); cin>>n>>k; for(int i=1;i<=n;i+=1) { cin>>x; if(x!=0) a.push_back(x); } n=a.size()-1; k=min(k,n); int ind=1; while(ind<a.size() && a[ind]<0) ind+=1; if(ind==a.size()) { cout<<0; return; } long long pre=0; for(int i=ind;i<=n;i+=1) { if(f*a[i]>0) pre+=a[i]; else { if(pre>0) { ans+=pre; cnt+=1; } val.push_back(pre); pre=a[i]; f=-f; } } if(pre>0) { ans+=pre; cnt+=1; } val.push_back(pre); //for(int i=1;i<val.size();i+=1) cout<<val[i]<<" "; if(cnt<=k) { cout<<ans; return; } int tot=val.size()-1; for(int i=1;i<=tot;i+=1) sum[i]=val[i]+sum[i-1]; for(int i=1;i<=tot;i+=1) { l[i]=r[i]=i; lnei[i]=i-1; rnei[i]=(i+1)%(tot+1); vld[i]=1; q.push(make_pair(-abs(a[i]),i)); } while(cnt>k) { long long d=q.top().first; int id=q.top().second; q.pop(); if(vld[id]==0) continue; ans+=d; vld[id]=0; if(vld[l[id]]==1 && vld[r[id]]==1) cnt-=1; tot+=1; vld[tot]=1; lnei[tot]=lnei[lnei[id]]; rnei[tot]=rnei[rnei[id]]; l[tot]=vld[lnei[tot]]==1 ? l[lnei[tot]] : lnei[id]; l[tot]=vld[rnei[tot]]==1 ? r[lnei[tot]] : rnei[id]; if(vld[lnei[tot]]) rnei[lnei[tot]]=tot; if(vld[rnei[tot]]) lnei[rnei[tot]]=tot; vld[rnei[id]]=vld[lnei[id]]=0; if(val[l[tot]]<0) q.push(make_pair(sum[r[tot]]-sum[l[tot]-1],tot)); else q.push(make_pair(-sum[r[tot]]+sum[l[tot]-1],tot)); cnt-=1; } cout<<ans; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int t=1; //cin>>t; while(t--) solve(); return 0; }
#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...