제출 #197543

#제출 시각아이디문제언어결과실행 시간메모리
197543JuneyCake 3 (JOI19_cake3)C++14
0 / 100
2 ms380 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int MAXN = 2e5 + 5; ll N, M, ans = -1e18; pii A[MAXN]; ll comp[MAXN], root[MAXN]; int get_idx(ll val) { return lower_bound(comp+1, comp+1+N, val) - comp; } struct PST { struct NODE { ll l, r, cnt, sum; } T[MAXN * 30]; int sz; int make(int v, int l, int r, int n) { if(r < v || v < l) return n; int cur = ++sz; T[cur] = T[n]; if(l != r) { int mid = l + r >> 1; T[cur].l = make(v, l, mid, T[n].l); T[cur].r = make(v, mid+1, r, T[n].r); } T[cur].cnt++; T[cur].sum += comp[v]; return cur; } ll query(int tot, int l, int r, int n1, int n2) { if(l == r) { int cnt = tot; return comp[l] * cnt; } int rcnt = T[T[n2].r].cnt - T[T[n1].r].cnt; ll sum = T[T[n2].r].sum - T[T[n1].r].sum; int mid = l + r >> 1; if(rcnt >= tot) return query(tot, mid+1, r, T[n1].r, T[n2].r); else return sum + query(tot - rcnt, l, mid, T[n1].l, T[n2].l); } } pst; void f(int s, int e, int l, int r) { if(l > r) return; int mid = l + r >> 1; ll k, MAX = -1e18; for(int i=max(s, mid); i<=e; i++) { ll q = pst.query(M, 1, N, root[mid-1], root[i]) - 2 * (A[i].fi - A[mid].fi); if(MAX < q) { MAX = q; k = i; } } ans = max(ans, MAX); f(s, k, l, mid-1); f(k, e, mid+1, r); } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> N >> M; for(int i=1; i<=N; i++) { cin >> A[i].se >> A[i].fi; comp[i] = A[i].se; } sort(comp+1, comp+1+N); sort(A+1, A+1+N); for(int i=1; i<=N; i++) root[i] = pst.make(get_idx(A[i].se), 1, N, root[i-1]); f(1, N, 1, N); cout << ans; }

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

cake3.cpp: In member function 'int PST::make(int, int, int, int)':
cake3.cpp:27:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
    int mid = l + r >> 1;
              ~~^~~
cake3.cpp: In member function 'll PST::query(int, int, int, int, int)':
cake3.cpp:42:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   int mid = l + r >> 1;
             ~~^~~
cake3.cpp: In function 'void f(int, int, int, int)':
cake3.cpp:50:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  int mid = l + r >> 1;
            ~~^~~
cake3.cpp:60:3: warning: 'k' may be used uninitialized in this function [-Wmaybe-uninitialized]
  f(s, k, l, mid-1); f(k, e, mid+1, r);
  ~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...