Submission #854816

#TimeUsernameProblemLanguageResultExecution timeMemory
85481612345678Holiday (IOI14_holiday)C++17
0 / 100
27 ms8284 KiB
#include"holiday.h" #include <bits/stdc++.h> using namespace std; #define ll long long const int nx=1e5+5; ll id[nx]; ll ans; struct segtree { ll f[4*nx]; ll sm[4*nx]; void update(int l, int r, int i, int idx, ll val) { if (idx<l||r<idx) return void(); if (l==r) return f[i]=1, sm[i]=val, void(); int md=(l+r)/2; update(l, md, 2*i, idx, val); update(md+1, r, 2*i+1, idx, val); f[i]=f[2*i]+f[2*i+1]; sm[i]=sm[2*i]+sm[2*i+1]; } ll query(int l, int r, int i, int cnt) { if (l==r) return (cnt==1)?sm[i]:0; int md=(l+r)/2; if (f[2*i]>cnt) return query(l, md, 2*i, cnt); return sm[2*i]+query(md+1, r, 2*i+1, cnt-f[2*i]); } } s; long long int findMaxAttraction(int n, int start, int d, int attraction[]) { vector<pair<ll, ll>> v(n); for (int i=0; i<n; i++) v[i]={attraction[i], i}; sort(v.begin(), v.end()); reverse(v.begin(), v.end()); for (int i=0; i<n; i++) id[v[i].second]=i; for (int i=0; i<n; i++) { s.update(0, n-1, 1, id[i], attraction[i]); ans=max(ans, s.query(0, n-1, 1, d-i)); } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...