Submission #1012441

#TimeUsernameProblemLanguageResultExecution timeMemory
1012441imarnCake 3 (JOI19_cake3)C++14
0 / 100
1 ms4444 KiB
#include<bits/stdc++.h> #define ll long long #define pb push_back #define all(x) x.begin(),x.end() #define pii pair<int,int> #define f first #define s second #define ub(x,y) upper_bound(all(y),x)-y.begin() using namespace std; const int mxn=2e5+5; struct node{ int a;ll b; node*l,*r; node (int a,ll b):a(a),b(b),l(NULL),r(NULL){}; node (node *l,node *r):a(l->a+r->a),b(l->b+r->b),l(l),r(r){}; }*rt[mxn]; int N,M,sz; ll v[mxn],c[mxn]; vector<int>g; node* build(int l,int r){ if(l==r)return new node(0,0); int m=(l+r)>>1; return new node(build(l,m),build(m+1,r)); } node *upd(node*t,int l,int r,int idx,ll v){ if(l==r)return new node(t->a+1,t->b+v); int m=(l+r)>>1; if(m>=idx)return new node(upd(t->l,l,m,idx,v),t->r); else return new node(t->l,upd(t->r,m+1,r,idx,v)); }ll ans=0; ll qr(node *tl,node *tr,int l,int r,int k){ if(l==r){ return min(tr->b-tl->b,1ll*k*g[l-1]); }int m=(l+r)>>1;int idx=tr->r->a-tl->r->a; if(idx>=k)return qr(tl->r,tr->r,m+1,r,k); else return tr->r->b-tl->r->b+qr(tl->l,tr->l,l,m,k-idx); } void solve(int l,int r,int opl,int opr){ if(r<l)return; int m=(l+r)>>1; pair<ll,ll>t={-1e16,0}; for(int i=opl;i<=min(opr,m-1);i++){ if(m-i+1<M)continue; ll rs=-2*c[m]+2*c[i]+qr(rt[i],rt[m-1],1,sz,M-2)+v[m]+v[i]; t=max(t,{rs,i}); }ans=max(ans,t.f); if(t.f==-1e16)return; solve(l,m-1,opl,t.s);solve(m+1,r,t.s,opr); } int main(){ ios_base::sync_with_stdio(0);cin.tie(0); cin>>N>>M;vector<pii>tmp; for(int i=0;i<N;i++){ int x,y;cin>>x>>y; tmp.pb({y,x});g.pb(x); }sort(all(tmp));sort(all(g));g.erase(unique(all(g)),g.end()); for(int i=0;i<N;i++)v[i+1]=tmp[i].s,c[i+1]=tmp[i].f;sz=g.size(); rt[0]=build(1,sz); for(int i=1;i<=N;i++)rt[i]=upd(rt[i-1],1,sz,ub(v[i],g),v[i]); solve(1,N,1,N);cout<<ans; }

Compilation message (stderr)

cake3.cpp: In function 'int main()':
cake3.cpp:57:5: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
   57 |     for(int i=0;i<N;i++)v[i+1]=tmp[i].s,c[i+1]=tmp[i].f;sz=g.size();
      |     ^~~
cake3.cpp:57:57: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
   57 |     for(int i=0;i<N;i++)v[i+1]=tmp[i].s,c[i+1]=tmp[i].f;sz=g.size();
      |                                                         ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...