Submission #1105599

#TimeUsernameProblemLanguageResultExecution timeMemory
1105599FaggiSails (IOI07_sails)C++11
0 / 100
40 ms9332 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; lim--; tot += b; a--; dp[a]++; if (lim >= 0) dp[lim]--; } for (i = MAXN - 1; i >= 0; i--) { dp[i] += dp[i + 1]; //cout << dp[i] << ' '; } //cout << endl; for (i = pot; i < MAXS; i++) { seg[i] = dp[i - pot]; } for (i = pot - 1; i > 0; i--) { seg[i] = seg[i * 2] + seg[i * 2 + 1]; } calc(tot, 1); /*for (i = 4; i >= 0; i--) { cout << vf[i] << ' '; } cout << endl;*/ 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...