Submission #1216729

#TimeUsernameProblemLanguageResultExecution timeMemory
1216729nhphucHoliday (IOI14_holiday)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; const int N = 100100; int n, st, d, piv, pos[N]; pair<int, int> a[N]; pair<int, long long> dpl[N], dpr[N], t[N * 4]; void upd (int id, int l, int r, int k, bool f){ if (l == r){ if (f){ t[id] = {1, 1ll * a[k].first}; } else { t[id] = {0, 0ll}; } return; } int m = l + r >> 1; if (k <= m){ upd(id * 2, l, m, k, f); } else { upd(id * 2 + 1, m + 1, r, k, f); } t[id] = make_pair(t[id * 2].first + t[id * 2 + 1].first, t[id * 2].second + t[id * 2 + 1].second); return; } long long get (int k){ long long ans = 0; int id = 1, l = 1, r = n; while (l <= r){ if (l == r){ if (k >= t[id].first){ ans += t[id].second; } break; } int m = l + r >> 1; if (k >= t[id * 2].first){ k -= t[id * 2].first; ans += t[id * 2].second; id = id * 2 + 1; l = m + 1; } else { r = m; id *= 2; } } return ans; } void dncl (int l, int r, int u, int v){ if (l > r){ return; } while (piv < u){ ++piv; upd(1, 1, n, pos[piv], true); } while (piv > u){ upd(1, 1, n, pos[piv], false); --piv; } int m = l + r >> 1; dpl[m] = {piv, get(m - (piv - st))}; while (piv < v){ ++piv; upd(1, 1, n, pos[piv], true); long long f = get(m - (piv - st)); if (f > dpl[m].second){ dpl[m] = {piv, f}; } } dncl(l, m - 1, u, dpl[m].first); dncl(m + 1, r, dpl[m].first, v); } void dncr (int l, int r, int u, int v){ if (l > r){ return; } while (piv < v){ upd(1, 1, n, pos[piv], false); ++piv; } while (piv > v){ --piv; upd(1, 1, n, pos[piv], true); } int m = l + r >> 1; dpr[m] = {piv, get(m - (st - piv))}; while (piv > u){ --piv; upd(1, 1, n, pos[piv], true); long long f = get(m - (st - piv)); if (f > dpr[m].second){ dpr[m] = {piv, f}; } } dncr(m + 1, r, u, dpr[m].first); dncr(l, m - 1, dpr[m].first, v); } int32_t main (){ ios::sync_with_stdio(false); cin.tie(nullptr); if (fopen ("test.inp", "r")){ freopen ("test.inp", "r", stdin); freopen ("test.out", "w", stdout); } cin >> n >> st >> d; ++st; for (int i = 1; i <= n; ++i){ cin >> a[i].first; a[i].second = i; } sort(a + 1, a + n + 1, greater<pair<int, int>>()); for (int i = 1; i <= n; ++i){ pos[a[i].second] = i; } piv = st - 1; dncl(0, d, st, min(st + d, n)); fill(t, t + N * 4, make_pair(0, 0ll)); piv = st; dncr(0, d, max(1, st - d), st - 1); long long res = 0; for (int i = 0; i <= d; ++i){ int r = dpl[i].first; int lef = d - ((r - st) + i); res = max(res, dpl[i].second + (lef >= 0 ? dpr[lef].second : 0ll)); } cout << res << "\n"; }

Compilation message (stderr)

holiday.cpp: In function 'int32_t main()':
holiday.cpp:108:17: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  108 |         freopen ("test.inp", "r", stdin);
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
holiday.cpp:109:17: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  109 |         freopen ("test.out", "w", stdout);
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/ld: /tmp/ccC67nBn.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccsrB2zQ.o:holiday.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccC67nBn.o: in function `main':
grader.cpp:(.text.startup+0xaf): undefined reference to `findMaxAttraction(int, int, int, int*)'
collect2: error: ld returned 1 exit status