求助
  • 板块学术版
  • 楼主mayingdi520
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/13 09:50
  • 上次更新2024/7/13 11:10:37
查看原帖
求助
996654
mayingdi520楼主2024/7/13 09:50

本蒟蒻写的树状数组为什么CE……玄关

#include<bits/stdc++.h>
using namespace std;

const int N=1e6+14;
int n,m;
int arr[N],lower[N],tr[N],b[N],ans[N];

struct ji{
	int l,r,id;
}q[N];

int lowbit(int x)
{
	return x & -x;
}

void add(int x,int k)
{
	for(int i=x;i<=n;i+=lowbit(i)) tr[i]+=k;
}

int query(int x)
{
	int res=0;
	for(int i=x;i;i-=lowbit(i)) res+=tr[i];
	return res;
}
int main()
{
	cin>>n;
	
	for(int i=1;i<=n;i++){
		cin>>arr[i];
		//add(i,arr[i]);
	}
	cin>>m;
	for(int i=1;i<=m;i++){
		cin>>q[i].l>>q[i].r;
		q[i].id=i;
	}
	sort(q+1,q+1+m);
	int cnt=1;
	for(int i=1;i<=m;i++){
		for(int j=cnt;j<=q[i].r;j++){
			if(b[arr[j]]) add(b[arr[j]],-1);
			add(j,1);
			b[arr[j]]=j;
		}
		cnt=q[i].r+1;
		ans[q[i].id]=query(q[i].r)-query(q[i].l-1);
	}
	for(int i=1;i<=m;i++){
		cout<<ans[i]<<endl;
	}
	return 0;
} 
2024/7/13 09:50
加载中...