Submission #1170837

#TimeUsernameProblemLanguageResultExecution timeMemory
1170837mr_azFeast (NOI19_feast)C++20
100 / 100
626 ms22488 KiB
#include<bits/stdc++.h> using namespace std; #ifdef LOCAL_JUDGE #include<local_debug> #else #define debug(...) 1 #endif #define ls (p<<1) #define rs (p<<1|1) #define pb push_back #define int long long #define eb emplace_back #define lowbit(x) (x&-x) #define rint register int #define alls(a) a.begin(),a.end() #define mem(a,b) memset(a,b,sizeof a) typedef long long ll; typedef __int128 i128; typedef long double ld; typedef unsigned long long ull; typedef pair<int,int> pii; bool ST; const int inf=0x3f3f3f3f; const ll INF=1e18; template<typename T> void read(T &x){ x=0;int f=1;char c=getchar(); while(!isdigit(c)){if(c=='-') f=-1;c=getchar();} while(isdigit(c)){x=x*10+c-'0';c=getchar();} x*=f; } template<typename T,typename ... Args> void read(T &x, Args &... y){read(x);read(y...);} namespace Mr_Az{ const int N=3e5+8; int T=1; int n,k,m,ans,cnt; bool f=0; int a[N],b[N]; bool vis[N]; set<int> s; set<pii> q; inline int abs(int x){return x<0?-x:x;} inline void solve(){ read(n,k); for(rint i=1;i<=n;i++) read(a[i]);a[0]=-1; for(rint i=1;i<=n;i++){ f|=(a[i]>=0); if(f){ m+=!((a[i-1]<0&&a[i]<0)||(a[i-1]>=0&&a[i]>=0)); b[m]+=a[i]; } } if(a[n]<0) m--; b[0]=b[m+1]=0; for(rint i=1;i<=m;i++){ cerr<<b[i]<<" "; if(b[i]>=0) cnt++; q.insert({abs(b[i]),i}); s.insert(i); }cerr<<endl; while(cnt>k){ cerr<<cnt<<" "<<k<<endl; auto [x,i]=*q.begin(); auto it=s.lower_bound(i),pre=it,nxt=it; pre--;nxt++; if(b[i]<0&&(it==s.begin()||nxt==s.end())){ s.erase(it); q.erase(q.begin()); continue; } vector<int> t;t.clear(); if(b[i]>=0) cnt--; if(it!=s.begin()){ b[i]+=b[*pre]; t.pb(*pre); } if(nxt!=s.end()){ b[i]+=b[*nxt]; t.pb(*nxt); } q.erase(q.begin()); for(auto xx:t){ if(b[xx]>=0) cnt--; s.erase(s.find(xx)); auto it1=q.find({abs(b[xx]),xx}); if(it1!=q.end()) q.erase(it1); } q.insert({abs(b[i]),i}); if(b[i]>=0) cnt++; } while(q.size()){ auto [x,i]=*(q.begin());q.erase(q.begin()); if(b[i]>=0) ans+=b[i]; } end: printf("%lld\n",ans); return ; } inline void mian(){if(!T) read(T);while(T--) solve();} } bool ED; signed main(){ // freopen(".in","r",stdin); // freopen(".out","w",stdout); auto st=clock(); Mr_Az::mian(); auto ed=clock(); cerr<<endl; cerr<<"Time: "<<ed-st<<" ms\n"; cerr<<"Memory: "<<abs(&ST-&ED)/1024.0/1024.0<<" MB\n"; return 0; }

Compilation message (stderr)

feast.cpp: In function 'void Mr_Az::solve()':
feast.cpp:46:26: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
   46 |                 for(rint i=1;i<=n;i++) read(a[i]);a[0]=-1;
      |                          ^
feast.cpp:47:26: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
   47 |                 for(rint i=1;i<=n;i++){
      |                          ^
feast.cpp:56:26: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
   56 |                 for(rint i=1;i<=m;i++){
      |                          ^
#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...