Submission #577708

#TimeUsernameProblemLanguageResultExecution timeMemory
577708SlavicG휴가 (IOI14_holiday)C++17
0 / 100
18 ms5320 KiB
#include "bits/stdc++.h" #include"holiday.h" using namespace std; #define ll long long const int N = 2e5 + 10; ll c[N], sum[4 * N], cnt[4 * N]; ll query(int i, int l, int r, int k) { if(l > r) return 0; if(k <= 0) return 0; if(cnt[i] <= k) return sum[i]; int mid = l + r >> 1; if(cnt[2 * i] > k) return query(2 * i, l, mid, k); return sum[2 * i] + query(2 * i + 1, mid + 1, r, k - cnt[2 * i]); } void modif(int i, int l, int r, int pos, bool b) { if(l > pos || r < pos) return; if(l == pos && r == pos) { sum[i] = (b ? c[i] : 0); cnt[i] = b; return; } int mid = l + r >> 1; modif(2 * i, l, mid, pos, b); modif(2 * i + 1, mid + 1, r, pos, b); sum[i] = sum[2 * i] + sum[2 * i + 1]; cnt[i] = cnt[2 * i] + cnt[2 * i + 1]; } long long int findMaxAttraction(int n, int start, int d, int a[]) { vector<pair<int, int>> x; for(int i = 0; i < n; ++i) x.push_back({a[i], i}); sort(x.rbegin(), x.rend()); vector<int> pos(n, -1); for(int i = 0; i < n; ++i) { c[i] = x[i].first; pos[x[i].second] = i; } ll ans = 0; for(int i = 0; i < n && d; ++i) { modif(1, 0, n - 1, pos[i], 1); ans = max(ans, query(1, 0, n - 1, d)); --d; } return ans; }

Compilation message (stderr)

holiday.cpp: In function 'long long int query(int, int, int, int)':
holiday.cpp:14:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   14 |     int mid = l + r >> 1;
      |               ~~^~~
holiday.cpp: In function 'void modif(int, int, int, int, bool)':
holiday.cpp:26:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   26 |     int mid = l + r >> 1;
      |               ~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...