Submission #1177616

#TimeUsernameProblemLanguageResultExecution timeMemory
11776168pete8Cake 3 (JOI19_cake3)C++20
100 / 100
1473 ms206500 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define f first #define s second #define pii pair<int,int> #define ppii pair<int,pii> #define vi vector<int> #define pb push_back #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() #define F(n) for(int i=0;i<n;i++) #define lb lower_bound #define ub upper_bound #define fastio ios::sync_with_stdio(false);cin.tie(NULL); #pragma GCC optimize ("03,unroll-lopps") #define sz(x) (int)((x).size()) #define int long long using namespace std; const int mod=1e9+7,mxn=2e5,inf=1e18,minf=-1e18,lg=20,Mxn=1e6; //#undef int int n,k,m,d,q; void setIO(string name){ ios_base::sync_with_stdio(0); cin.tie(0); freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout); } int C[mxn+10],V[mxn+10]; struct node{ node *l,*r; int sum,cnt; node():l(0),r(0),sum(0),cnt(0){}; }; node *root[mxn+10]; int W[mxn+10]; void build(node *&cur,int l=0,int r=n){ cur=new node(); if(l==r)return; int mid=(l+r)>>1; build(cur->l,l,mid); build(cur->r,mid+1,r); } void update(node *&cur,node *last,int qpos,int l=0,int r=n){ cur=new node(*last); if(l==r){ cur->sum+=W[l]; cur->cnt++; return; } int mid=(l+r)>>1; if(qpos<=mid)update(cur->l,last->l,qpos,l,mid); else update(cur->r,last->r,qpos,mid+1,r); cur->cnt=cur->l->cnt+cur->r->cnt; cur->sum=cur->l->sum+cur->r->sum; } int getsum(node *L,node *R,int k,int l=0,int r=n){ if(k==0)return 0; if(R->cnt-L->cnt<=k)return R->sum-L->sum; if(l==r)return W[l]*k; int mid=(l+r)>>1; return getsum(L->r,R->r,k,mid+1,r)+getsum(L->l,R->l,max(0LL,k-(R->r->cnt-L->r->cnt)),l,mid); } int dp[mxn+10]; int getcost(int l,int r){ return getsum(root[l-1],root[r],m)+2*C[l]; } int32_t main(){ fastio // 1d/1d ? cin>>n>>m; vector<pii>v(n); vector<int>comp; for(auto &i:v)cin>>i.s>>i.f,comp.pb(i.s); sort(all(v)); sort(all(comp)); comp.erase(unique(all(comp)),comp.end()); for(auto &i:v)i.s=lb(all(comp),i.s)-comp.begin(); for(int i=0;i<comp.size();i++)W[i]=comp[i]; for(int i=0;i<n;i++)C[i+1]=v[i].f,V[i+1]=v[i].s; build(root[0]); for(int i=1;i<=n;i++)update(root[i],root[i-1],V[i]); deque<pii>dq; dq.pb({m-1,1}); //starting point,opt int ans=minf; for(int i=m;i<=n;i++){ if(dq.size()>1&&dq[1].f==i)dq.pop_front(); else dq[0].f++; ans=max(ans,getcost(dq.front().s,i)-2*C[i]); //76 23 while(!dq.empty()&&getcost(i-m+2,dq.back().f)>=getcost(dq.back().s,dq.back().f)){ dq.pop_back(); } if(dq.empty()){ dq.pb({i,i-m+2}); continue; } int l=dq.back().f,r=n,pos=inf; while(l<=r){ int mid=l+(r-l)/2; if(getcost(dq.back().s,mid)<=getcost(i-m+2,mid))r=mid-1,pos=min(pos,mid); else l=mid+1; } if(pos!=inf)dq.pb({pos,i-m+2}); } cout<<ans; } /* */

Compilation message (stderr)

cake3.cpp:16:40: warning: bad option '-funroll-lopps' to pragma 'optimize' [-Wpragmas]
   16 | #pragma GCC optimize ("03,unroll-lopps")
      |                                        ^
cake3.cpp:23:23: warning: bad option '-funroll-lopps' to attribute 'optimize' [-Wattributes]
   23 | void setIO(string name){
      |                       ^
cake3.cpp:32:14: warning: bad option '-funroll-lopps' to attribute 'optimize' [-Wattributes]
   32 |         node():l(0),r(0),sum(0),cnt(0){};
      |              ^
cake3.cpp:36:38: warning: bad option '-funroll-lopps' to attribute 'optimize' [-Wattributes]
   36 | void build(node *&cur,int l=0,int r=n){
      |                                      ^
cake3.cpp:43:59: warning: bad option '-funroll-lopps' to attribute 'optimize' [-Wattributes]
   43 | void update(node *&cur,node *last,int qpos,int l=0,int r=n){
      |                                                           ^
cake3.cpp:56:49: warning: bad option '-funroll-lopps' to attribute 'optimize' [-Wattributes]
   56 | int getsum(node *L,node *R,int k,int l=0,int r=n){
      |                                                 ^
cake3.cpp:64:24: warning: bad option '-funroll-lopps' to attribute 'optimize' [-Wattributes]
   64 | int getcost(int l,int r){
      |                        ^
cake3.cpp:67:14: warning: bad option '-funroll-lopps' to attribute 'optimize' [-Wattributes]
   67 | int32_t main(){
      |              ^
cake3.cpp: In function 'void setIO(std::string)':
cake3.cpp:25:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |         freopen((name+".in").c_str(),"r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cake3.cpp:26:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   26 |         freopen((name+".out").c_str(),"w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...