제출 #1277607

#제출 시각아이디문제언어결과실행 시간메모리
1277607namhhCake 3 (JOI19_cake3)C++20
0 / 100
1 ms576 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define fi first #define se second const int N = 2e5+5; int n,m,ll = 1,rr = 0,ans = 0; pii st[4*N],a[N]; vector<int>nen; bool cmp(pii a, pii b){ return a.se < b.se; } pii merge(pii a, pii b){ return {a.fi+b.fi,a.se+b.se}; } void update(int id, int l, int r, int i, int val){ if(l > i || r < i) return; if(l == r){ st[id].fi += val*nen[l-1]; st[id].se += val; return; } int mid = (l+r)/2; update(2*id,l,mid,i,val); update(2*id+1,mid+1,r,i,val); st[id] = merge(st[2*id],st[2*id+1]); } int get(int id, int l, int r, int k){ if(k == 0) return 0; if(l == r){ return k*nen[l-1]; } int mid = (l+r)/2; if(k >= st[2*id+1].se) return st[2*id+1].fi+get(2*id,l,mid,k-st[2*id+1].se); return get(2*id+1,mid+1,r,k); } void chimto(int l1, int r1){ while(ll < l1){ update(1,1,nen.size(),a[ll].fi,-1); ll++; } while(ll > l1){ ll--; update(1,1,nen.size(),a[ll].fi,1); } while(rr < r1){ rr++; update(1,1,nen.size(),a[rr].fi,1); } while(rr > r1){ update(1,1,nen.size(),a[rr].fi,-1); rr--; } } void dnc(int l, int r, int x, int y){ if(l > r) return; int mid = (l+r)/2; int opt = x; int mx = -1; int lim = min(mid-m+1,y); for(int i = x; i <= lim; i++){ chimto(i+1,mid-1); int val = nen[a[mid].fi-1]+nen[a[i].fi-1]+get(1,1,nen.size(),m-2)-2*(a[mid].se-a[i].se); if(val > mx){ mx = val; opt = i; } } ans = max(ans,mx); dnc(l,mid-1,x,opt); dnc(mid+1,r,opt,y); } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m; for(int i = 1; i <= n; i++) cin >> a[i].fi >> a[i].se; sort(a+1,a+n+1,cmp); for(int i = 1; i <= n; i++) nen.push_back(a[i].fi); sort(nen.begin(),nen.end()); nen.erase(unique(nen.begin(),nen.end()),nen.end()); for(int i = 1; i <= n; i++) a[i].fi = lower_bound(nen.begin(),nen.end(),a[i].fi)-nen.begin()+1; dnc(1,n,1,n); cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...