Submission #1030990

#TimeUsernameProblemLanguageResultExecution timeMemory
1030990coolboy19521The Big Prize (IOI17_prize)C++17
99.72 / 100
35 ms6228 KiB
#include "prize.h" #include "iostream" using namespace std; const int sz = 2e5 + 10; vector<int> bf[sz]; int ft[sz]; int N; void inc(int v) { for (; v <= N; v += v & -v) ft[v] ++; } int sum(int le, int ri) { le --; int ql = 0; for (; 0 < le; le -= le & -le) ql += ft[le]; int qr = 0; for (; 0 < ri; ri -= ri & -ri) qr += ft[ri]; return qr - ql; } vector<int> Ask(int x) { if (bf[x].size()) return bf[x]; return bf[x] = ask(x); } int find_best(int n) { N = n; int mx = 0, xx = 600; for (int i = 0; i < min(n, 600); i ++) { auto pr = Ask(i); mx = max(mx, pr[0] + pr[1]); if (0 == pr[0] + pr[1]) return i; if (30 < mx) { xx = i + 1; break; } inc(i + 1); } int ls = xx; while (ls < n) { int ps; for (; ls < n; ls ++) { auto pr = Ask(ls); int sm = pr[0] + pr[1]; if (0 == sm) return ls; if (sm == mx) { ps = pr[1]; break; } inc(ls + 1); } int ds = xx; int rs = n; while (1 < rs - ds) { int mi = (ds + rs) / 2; if (mi <= ls) { ds = mi; continue; } if (sum(ls + 1, mi + 1)) { rs = mi; continue; } auto pr = Ask(mi); int sm = pr[0] + pr[1]; if (0 == sm) return mi; if (sm != mx) { inc(mi + 1); rs = mi; } if (0 == ps - pr[1]) ds = mi; else rs = mi; } ls = ds + 1; } return 0; }

Compilation message (stderr)

prize.cpp: In function 'int find_best(int)':
prize.cpp:78:13: warning: 'ps' may be used uninitialized in this function [-Wmaybe-uninitialized]
   78 |             if (0 == ps - pr[1]) ds = mi;
      |             ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...