General
 
 
# Author Problem Lang Verdict Time Memory Sent Judged  
188400068 Practice:
DaiRuiChen007
1520F2 - 9 C++14 (GCC 6-32) Accepted 733 ms 1768 KB 2023-01-08 11:54:04 2023-01-08 11:54:04
→ Source
// LUOGU_RID: 99038963
#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int MAXN=2e5+1;
inline int read(int l,int r) {
	cout<<"? "<<l<<" "<<r<<endl;
	int ret; cin>>ret; return ret;
}
int n,T,k;
struct BitTree {
	int tree[MAXN];
	inline int lowbit(int x) { return x&-x; }
	inline void update(int x,int v) {
		for(;x<=n;x+=lowbit(x)) tree[x]+=v;
	}
	inline void Modify(int l,int r,int v) {
		update(l,v);
		if(r<n) update(r+1,-v);
	}
	inline int Query(int x) {
		int ret=0;
		for(;x;x-=lowbit(x)) ret+=tree[x];
		return ret;
	}
}	B;
bool vis[MAXN];
inline int query(int x) {
	if(vis[x]) return B.Query(x);
	vis[x]=true;
	int p=read(1,x);
	B.Modify(x,x,p-B.Query(x));
	return p;
}
inline bool check(int x) {
	return x-query(x)>=k;
}
signed main() {
	cin>>n>>T;
	while(T--) {
		cin>>k;
		int l=1,r=n,res=0;
		while(l<=r) {
			int mid=(l+r)>>1;
			if(check(mid)) res=mid,r=mid-1;
			else l=mid+1;
		}
		B.Modify(res,n,1);
		cout<<"! "<<res<<endl;
	}
	return 0;
}
?
Time: ? ms, memory: ? KB
Verdict: ?
Input
?
Participant's output
?
Jury's answer
?
Checker comment
?
Diagnostics
?
Click to see test details