社区讨论

求条

P4137Rmq Problem / mex参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mkmalqz8
此快照首次捕获于
2026/01/20 15:48
4 周前
此快照最后确认于
2026/01/23 22:25
4 周前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
struct Segment_Tree
{
	int ls,rs,sum;
}tree[N*20];
int tot,root[N];
void update(int &id,int l,int r,int p)
{
	if(l>p||r<p)return;
	tree[++tot]=tree[id];
	id=tot;
	tree[id].sum++;
	if(l==r)return;
	int mid=l+r>>1;
	update(tree[id].ls,l,mid,p);
	update(tree[id].rs,mid+1,r,p);
}
int query(int idx,int idy,int l,int r)
{
	if(l==r)return l;
	int mid=l+r>>1;
	if(tree[tree[idy].ls].sum-tree[tree[idx].ls].sum<mid-l+1)return query(tree[idx].ls,tree[idy].ls,l,mid);
	return query(tree[idx].rs,tree[idy].rs,mid+1,r);
}
signed main()
{
	int n,Q;
	cin>>n>>Q;
	for(int i=1,x;i<=n;i++)
	{
		cin>>x;
		update(root[i]=root[i-1],0,N,x);
	}
	while(Q--)
	{
		int l,r;
		cin>>l>>r;
		cout<<query(root[l-1],root[r],0,N)<<"\n";
	}
    return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...