社区讨论
救救孩子,活不了了
P1972[SDOI2009] HH 的项链参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mi86jg3o
- 此快照首次捕获于
- 2025/11/21 09:26 4 个月前
- 此快照最后确认于
- 2025/11/21 09:26 4 个月前
CPP
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct X
{
int l,r,num,ans;
}fi[1000000];
int n,m;
int c[1000000],net[1000000];
int a[1000000];
void add(int x,int y)
{
for(;x<=n;x+=(x&-x)) c[x]+=y;
}
int ask(int x)
{
int ans=0;
for(;x;x-=(x&-x)) ans+=c[x];
return ans;
}
bool cmp1(X A,X B)
{
return A.r<B.r;
}
bool cmp2(X A,X B)
{
return A.num<B.num;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",a+i);
}
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&fi[i].l,&fi[i].r);
fi[i].num=i;
}
sort(fi+1,fi+m+1,cmp1);
int cnt=1;
for(int i=1;i<=n;i++)
{
if(net[a[i]]!=0)
add(net[a[i]],-1);
add(i,1);
net[a[i]]=i;
if(fi[cnt].r==i)
{
fi[cnt].ans=ask(fi[cnt].r)-ask(fi[cnt].l-1);
cnt++;
}
}
sort(fi+1,fi+m+1,cmp2);
for(int i=1;i<=m;i++)
{
printf("%d\n",fi[i].ans);
}
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...