Why TLE
查看原帖
Why TLE
464004
ZepX_D楼主2024/12/30 19:53
#include <bits/stdc++.h> 
#define U unsigned
#define LL long long
#define DB double
#define LD long double
#define pii pair<int,int>
#define pLi pair<LL,int>
#define pLL pair<LL,LL>
#define pb push_back
#define ve vector<int>
#define VE vector<LL>
#define fr first
#define se second

using namespace std;

inline LL read()
{
	LL x = 0,f = 1;char ch = getchar();
	while (!isdigit(ch)) (ch == '-') && (f = -1),ch = getchar();
	while (isdigit(ch)) x = x*10+ch-48,ch = getchar();
	return x*f;
}

const int N = 2000;
int t[N<<2];

inline int merge(int a,int b)
{
	if (!a || !b) return a|b;
	printf("? %d %d\n",a,b),fflush(stdout);
	return read() ? b : a;
}

void M(int l,int r,int L,int R,int i)
{
	if (l == r) return (void)(t[i] = l);
	int mid = (l+r)>>1;
	if (mid >= L) M(l,mid,L,R,i<<1);
	if (mid+1 <= R) M(mid+1,r,L,R,i<<1|1);
	t[i] = merge(t[i<<1],t[i<<1|1]);
}

void D(int l,int r,int p,int i)
{
	if (l == r) return (void)(t[i] = 0);
	int mid = (l+r)>>1;
	if (p <= mid) D(l,mid,p,i<<1);
	else D(mid+1,r,p,i<<1|1);
	t[i] = merge(t[i<<1],t[i<<1|1]);
}

int main()
{
	int n = read(),l = 1;
	for (int i = 1;i <= n;i++)
	{
		int x = read();
		M(1,N,l,l+x-1,1),l += x;
		printf("! %d\n",t[1]),fflush(stdout);
		D(1,N,t[1],1);
	}
	return 0;
}
2024/12/30 19:53
加载中...