QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#832300#866. Display of SpringscwfxlhTL 0ms0kbC++141023b2024-12-25 20:22:312024-12-25 20:22:33

Judging History

This is the latest submission verdict.

  • [2024-12-25 20:22:33]
  • Judged
  • Verdict: TL
  • Time: 0ms
  • Memory: 0kb
  • [2024-12-25 20:22:31]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
int n,mxv[500003],lf[100003],w,ans;
string s;
int Query(int a,int b,int W){
	cout<<"? "<<a<<' '<<b<<' '<<W<<'\n';
	fflush(stdout);
	cin>>s;
	if(s[0]=='F')return 1;
	if(s[0]=='S')return 2;
	return 0;
}
void build(int now,int l,int r){
	if(l==r){lf[l]=now;return;}
	build(now*2,l,((l+r)>>1));
	build(now*2+1,((l+r)>>1)+1,r);
	return;
}
void add(int now,int l,int r,int val){
	if(mxv[now]&&Query(mxv[now],val,((l+r)/2))==2)swap(mxv[now],val);
	if(!mxv[now]){swap(mxv[now],val);return;}
	if(Query(mxv[now],val,l)==2)add(now*2,l,((l+r)>>1),val);
	else add(now*2+1,((l+r)>>1)+1,r,val);
	return;
}
int main(){
	cin>>n;
	build(1,1,100000);
	for(int i=1;i<=n;i++)add(1,1,100000,i);
	cout<<"!\n";
	fflush(stdout);
	while(1){
		cin>>s;
		if(s[0]=='F')break;
		cin>>w;
		ans=0;
		for(int i=lf[w];i;i/=2){
			if(ans==0)ans=mxv[i];
			else if(mxv[i]&&Query(ans,mxv[i],w)==2)ans=mxv[i];
		}
		cout<<"! "<<ans<<'\n';
		fflush(stdout);
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Time Limit Exceeded

input:

3
SECOND
SECOND

output:

? 1 2 50000
? 2 1 1
? 2 3 50000

result: