제출 #334714

#제출 시각아이디문제언어결과실행 시간메모리
334714LucaDantasThe Big Prize (IOI17_prize)C++17
20 / 100
99 ms1160 KiB
#include<bits/stdc++.h>
using namespace std;
#include "prize.h"

// std::vector<int> res = ask(i);

std::mt19937 rng(std::chrono::steady_clock::now().time_since_epoch().count() ^ (long long) (make_unique<char>().get()));

template<typename T> T rnd(T v) {
  T k = (T) rng();
  return (T) (((k % v) + v) % v);
}

constexpr int maxn = 2e5+10;

const vector<int> good = {0, 0};

int bit[maxn];

void upd(int x, int v) {
	for(x++; x < maxn; x += x&-x)
		bit[x] += v;
}

int query(int x) {
	int ans = 0;
	for(x++; x > 0; x -= x&-x)
		ans += bit[x];
	return ans;
}

int find_best(int n) {
	int start = 0, base = 0;
	// int start = 0, base = 3;
	for(int i = 0; i < 20; i++) {
		vector<int> a = ask(rnd(n));
		base = max(base, a[0]+a[1]);
	}
	while(1) {
		int l = 0, r = n-1;
		while(1) {
			int m = (l+r) >> 1;
			vector<int> a = ask(m);
			if(a == good) return m;
			if(a[0]+a[1] == base) {
				if(a[0]-query(m)) r = m-1;
				else l = m+1;
			} else {
				// puts("COMECOU");
				upd(m, 1);
				int p = m-1;
				// while(p >= 0) {
				// 	vector<int> a = ask(p);
				// 	if(a[0]+a[1] == base) {
				// 		if(!(a[0]-query(p)))
				// 			start = m+1;
				// 		break;
				// 	}
				// 	if(a == good) return p;
				// 	upd(p, 1);
				// 	--p;
				// };
				// puts("TERMINOU");
				// printf("start %d\n", start);
				break;
			}
		}
	}
}

컴파일 시 표준 에러 (stderr) 메시지

prize.cpp: In function 'int find_best(int)':
prize.cpp:51:9: warning: unused variable 'p' [-Wunused-variable]
   51 |     int p = m-1;
      |         ^
prize.cpp:33:6: warning: unused variable 'start' [-Wunused-variable]
   33 |  int start = 0, base = 0;
      |      ^~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...