# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1015937 | 2024-07-07T05:58:39 Z | hotboy2703 | 커다란 상품 (IOI17_prize) | C++17 | 1 ms | 3416 KB |
#include "prize.h" #include<bits/stdc++.h> using namespace std; using ll = long long; #define pll pair <ll,ll> #define fi first #define se second #define MP make_pair #define sz(a) (ll((a).size())) #define BIT(mask,i) (((mask) >> (i))&1) #define MASK(i) (1LL << (i)) const ll MAXN = 2e5+100; pll a[MAXN]; ll ans = -1; ll req = 0; void query(ll i){ if (a[i].fi==-1){ vector <int> tmp = ask(i); a[i] = MP(tmp[0],tmp[1]); if (a[i].fi+a[i].se==0)ans = i; } } void solve(ll l,ll r,ll l1,ll r1){ // cout<<l<<' '<<r<<' '<<l1<<' '<<r1<<endl; ll k=r1-l1; if (k==0)return; ll mid = (l + r) >> 1; ll id = -1; for (ll i = 0;i < k;i ++){ ll cur_mid = mid + ((i+1)/2) * (i%2?1:-1); query(cur_mid); if (a[cur_mid].fi+a[cur_mid].se==req){ id = i; break; } } if (id==-1)return; ll mid_l,mid_r; ll L,R; if (id%2){ mid_r = mid + ((id+1)/2); mid_l = mid - ((id-1)/2); R = a[mid_r].fi; L = R-id; } else{ mid_r = mid + (id/2); mid_l = mid - (id/2); L = a[mid_l].fi; R = L+id; } solve(l,mid_l-1,l1,L); solve(mid_r+1,r,R,r1); } mt19937_64 rng(69420); int find_best(int n) { memset(a,-1,sizeof a); // req = 3; for (ll i = 0;i < min(50,n);i ++){ query(rng()%n); req = max(a[i].fi+a[i].se,req); } solve(0,n-1,0,req); return ans; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 1 ms | 3416 KB | Integer -1 violates the range [0, 199999] |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 1 ms | 3416 KB | Integer -1 violates the range [0, 199999] |
2 | Halted | 0 ms | 0 KB | - |