线段树寄了
查看原帖
线段树寄了
917246
Zan_mao楼主2023/8/26 10:34
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+9;
int n,m,t[N<<2],k,opt,x,minn;
void build(int id, int L, int R){
	if(L==R){
		t[id]=0;
		return;
	}
	int mid =(L+R) >> 1;
	build(id*2,L,mid);
	build(id*2+1,mid+1,R);
	t[id]=min(t[id*2],t[id*2+1]);
}
void change(int id,int end,int v,int l,int r){
	if(l==r){
		t[id]+=v;
		return;
	}
	int mid=(l+r)/2;
	if(end<=mid) change(id*2,end,v,l,mid);
	else change(id*2+1,end,v,mid+1,r);
	t[id]=min(t[id*2],t[id*2+1]);
}
int main(){
	cin >> k;
	if(k==1) return -1;
	while(k--){
		cin >> n >> m;
		build(1,1,n);
		minn=1;
		for(int i=1;i<=m;i++){
		    cin >> opt >> x;
		    if(opt==1){
			    change(1,x,1,1,n);
			    if(t[1]>=minn){
					printf("%d\n",i);
					goto N;
				}
			}
			else{
				change(1,x,-1,1,n),minn--;
				if(t[1]>=minn){
					printf("%d\n",i);
					goto N;
				}
			}
		}
		cout << "-1\n";
		N:;
	}			
}
2023/8/26 10:34
加载中...