제출 #102679

#제출 시각아이디문제언어결과실행 시간메모리
102679ihdigniteCake 3 (JOI19_cake3)C++14
100 / 100
1014 ms10592 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int mxN=2e5; int n, m, p[mxN]; array<ll, 2> a[mxN], q[mxN], ft[mxN+1]; ll ans=-1e18; array<ll, 2> operator+(array<ll, 2> a, array<ll, 2> b) { return {a[0]+b[0], a[1]+b[1]}; } void upd(int i, array<ll, 2> x) { for(++i; i<=n; i+=i&-i) ft[i]=ft[i]+x; } ll sk(int k) { array<ll, 2> r{}; for(int i=17, x=0; ~i; --i) { if(x+(1<<i)<=n&&(r+ft[x+(1<<i)])[1]<=k) { x+=1<<i; r=r+ft[x]; } } return r[0]; } void dc(int l1=0, int r1=n-m, int l2=0, int r2=n-1) { if(l1>r1) { for(int i=l2; i<=r2; ++i) upd(p[i], {a[i][1], 1}); return; } int m1=(l1+r1)/2, m2; for(int i=l1; i<m1; ++i) upd(p[i], {-a[i][1], -1}); ll ca=-1e18; for(int i=l2; i<=r2; ++i) { upd(p[i], {a[i][1], 1}); if(i-m1+1<m) continue; ll da=sk(m)-2*a[i][0]; if(da>ca) { m2=i; ca=da; } } ans=max(ca+2*a[m1][0], ans); for(int i=l1; i<m1; ++i) upd(p[i], {a[i][1], 1}); for(int i=l2; i<=r2; ++i) upd(p[i], {-a[i][1], -1}); dc(l1, m1-1, l2, m2); upd(p[m1], {-a[m1][1], -1}); upd(p[m2], {-a[m2][1], -1}); dc(m1+1, r1, m2, r2); } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m; for(int i=0; i<n; ++i) cin >> a[i][1] >> a[i][0]; sort(a, a+n); for(int i=0; i<n; ++i) q[i]={-a[i][1], i}; sort(q, q+n); for(int i=0; i<n; ++i) p[q[i][1]]=i; dc(); cout << ans; }

컴파일 시 표준 에러 (stderr) 메시지

cake3.cpp: In function 'void dc(int, int, int, int)':
cake3.cpp:58:5: warning: 'm2' may be used uninitialized in this function [-Wmaybe-uninitialized]
  upd(p[m2], {-a[m2][1], -1});
  ~~~^~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...