有和我这个蒟蒻一样想用莫队水的吗?
  • 板块P1816 忠诚
  • 楼主hgzxwzfHbomb-47
  • 当前回复19
  • 已保存回复19
  • 发布时间2022/1/26 22:58
  • 上次更新2023/10/28 10:49:00
查看原帖
有和我这个蒟蒻一样想用莫队水的吗?
571634
hgzxwzfHbomb-47楼主2022/1/26 22:58
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#define int long long 
using namespace std;
set<int>t;
int a[500001],pos[500001],res,num[500001];
struct Q
{
	int l,r,k;
}q[500001];
void Add(int n) {t.insert(a[n]);}
void Sub(int n) {t.erase(a[n]);}
bool comp(const Q x,const Q y) {return pos[x.l]==pos[y.l]?x.r<y.r:pos[x.l]<pos[y.l];}
signed main()
{
	int n,m;
	scanf("%lld%lld",&n,&m);
	int size=sqrt(n);
	for(int i=1;i<=n;i++) scanf("%lld",&a[i]),pos[i]=i/size;	
	for(int i=1;i<=m;i++)
	{
		scanf("%lld%lld",&q[i].l,&q[i].r);
		q[i].k=i;
	}
	sort(q+1,q+m+1,comp);
	int l=0,r=0;
	for(int i=1;i<=m;i++)
	{
		while(q[i].l<l) Add(--l);
		while(q[i].r>r) Add(++r);
		while(q[i].l>l) Sub(l++);
		while(q[i].r<r) Sub(r--);
		num[q[i].k]=*t.begin();
	}
	for(int i=1;i<=m;i++)printf("%lld ",num[i]);
	return 0;
}

不过没过,只混了六十分QAQ

2022/1/26 22:58
加载中...