Submission #512964

#TimeUsernameProblemLanguageResultExecution timeMemory
512964kevinxiehkThe Big Prize (IOI17_prize)C++17
Compilation error
0 ms0 KiB
#include "prize.h" #include "bits/stdc++.h" using namespace std; int ddd = 1; int fen[200005][10]; int corr[10]; int n; unordered_map<int, int> aaa; void add(int id, int x, int k) { id++; while(id <= n) { fen[id][k] += x; id += (id & (-id)); } } int sum(int id, int k) { int ans = 0; id++; while(id > 0) { ans += fen[id][k]; id -= (id & (-id)); } return ans; } int getbefore(int id, int k) { int t = 0; for(int i = 1; i < ddd; i++) { if(corr[i] < k) t += sum(id, i); } return t; } void add_val(int a, int k) { if(aaa[k] == 0) {corr[ddd] = k; aaa[k] = ddd++;} add(a, 1, aaa[k]); } bool vi[200005]; bool vi2[200005]; vector<int> store[200005]; int now = 0; int dx = 0; int sign = 1; int mx = 0; int ans = -1; vector<int> aa(int t) { cerr << t << '\n'; vector<int> res; if(vi[t]) { return store[t]; // int k = 0; // while((t - k < 0 ||vi[t - k]) && (t + k >= n || vi[t + k])) k++; // if(t - k >= 0 && !vi[t - k]) now = t = t - k; // else now = t = t + k; } vi[t] = true; res = ask(t); if(res[0] + res[1] == 0) ans = t; add_val(t, res[0] + res[1]); // if(res[0] + res[1] < mx && t > 0) aa(t - 1); now++; // assert(now <= 10000); // vi[t] = true; return store[t] = res; } int ll = 1000, rr = n - 1; void solve(int l, int r) { cerr << l << ' ' << r << '\n'; if(l > r) return; assert(aa(l)[0] <= getbefore(l, mx)); int m = (l + r) / 2; vector<int> res = aa(m); if(l == r) return; // vector<int> res = aa(m); // if(res[0] + res[1] == 0) {ans = m; return;} int k = 1, d = 1; do { m += d * k; d *= -1; k++; res = aa(m); } while(res[0] + res[1] < mx && m <= r && m >= l); if(m > r || m < l) return; // if(m == l && res[0] + res[1] < mx) { // ll = max(ll, (l + r) / 2 + 1); // return; // } // if(res[1] == 0) rr = m - 1; // if(l == r) { // ll = m + 1; // return; // } if(res[0] > getbefore(m, res[0] + res[1])) { solve(l, m - 1); // vi2[m] = true; } else if(res[0] == getbefore(m, res[0] + res[1])) { // ll = max(ll, m + 1); solve(m + 1, r); // return; } else for(1); } int find_best(int N) { for(int i = 0; i < 1000; i++) { vector<int> res = aa(i); if(res[0] + res[1] == 0) return i; mx = max(mx, res[0] + res[1]); } n = N; rr = n - 1; // int t = 100; while(ans == -1) { cerr << "e\n"; // assert(aa(ll)[0] <= getbefore(ll, mx)); solve(ll, rr); // cerr << now << '\n'; // vector<int> res = aa(now); // if(res[0] + res[1] == 0) return now; // if(!vi[now]) add_val(now, res[0] + res[1]); // vi[now] = true; // if(res[0] <= getbefore(now, res[0] + res[1])) { // sign = 1; // dx *= 2; // if(dx == 0) dx++; // } // else { // sign = -1; // dx /= 2; // if(dx == 0) dx++; // } // if(sign == 1) dx = min(dx, n - 1 - now); // else dx = min(dx, now); // now += dx * sign; } return ans; // for(int i = 0; i < n; i++) { // vector<int> res = ask(i); // if(res[0] + res[1] == 0) // return i; // } // return 0; }

Compilation message (stderr)

prize.cpp: In function 'void solve(int, int)':
prize.cpp:100:15: error: expected ';' before ')' token
  100 |     else for(1);
      |               ^
      |               ;
prize.cpp:100:14: warning: statement has no effect [-Wunused-value]
  100 |     else for(1);
      |              ^
prize.cpp:101:1: error: expected primary-expression before '}' token
  101 | }
      | ^
prize.cpp:100:17: error: expected ';' before '}' token
  100 |     else for(1);
      |                 ^
      |                 ;
  101 | }
      | ~                
prize.cpp:101:1: error: expected primary-expression before '}' token
  101 | }
      | ^
prize.cpp:100:17: error: expected ')' before '}' token
  100 |     else for(1);
      |             ~   ^
      |                 )
  101 | }
      | ~                
prize.cpp:101:1: error: expected primary-expression before '}' token
  101 | }
      | ^