Submission #1105603

#TimeUsernameProblemLanguageResultExecution timeMemory
1105603FaggiSails (IOI07_sails)C++11
0 / 100
44 ms9044 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; const int MAXN = 1e5; const int MAXS = 262144; ll seg[MAXS], dp[MAXN], vf[MAXN], pot = 131072, dpCalc[MAXN + 1]; void calc(ll x, ll nod) { if (nod >= pot) { vf[nod - pot] = x; return; } ll iz, der, mid, maD; mid = x / 2ll; iz = mid; der = mid; if (der + der < x) { der++; } maD = seg[nod * 2 + 1]; if (maD < der) { iz += der - maD; der = maD; } if (iz > 0) { calc(iz, nod * 2); } if (der > 0) { calc(der, nod * 2 + 1); } } int main() { ll n, i, tot = 0, a, b, res = 0, lim; cin >> n; for (i = 2; i <= MAXN; i++) { dpCalc[i] = dpCalc[i - 1] + (i - 1); } for (i = 0; i < n; i++) { cin >> a >> b; lim = a - b - 1; tot += b; a--; dp[a]++; if (lim >= 0) { dp[lim]--; } } for (i = MAXN - 2; i >= 0; i--) { dp[i] += dp[i + 1]; seg[i + pot] = dp[i]; } for (i = pot - 1; i > 0; i--) { seg[i] = seg[i * 2] + seg[i * 2 + 1]; } calc(tot, 1); for (i = MAXN - 1; i >= 0; i--) { res += dpCalc[vf[i]]; } cout << res; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...