0 分求助
查看原帖
0 分求助
531930
Southern_Dynasty楼主2023/1/17 19:16

RT.

#include<bits/stdc++.h>
//#pragma GCC optimize("Ofast")
#define gt getchar
#define pt putchar
#define y1 y233
typedef long long ll;
//typedef __int128 lll;
typedef unsigned long long ull;
const int N=1e6+5;
using namespace std;
inline bool __(char ch){return ch>=48&&ch<=57;}
inline int read(){
   	int x=0;bool sgn=0;char ch=gt();
   	while(!__(ch)&&ch!=EOF){sgn|=(ch=='-');ch=gt();}
   	while(__(ch)){x=(x<<1)+(x<<3)+(ch-48);ch=gt();}
	return sgn?-x:x;
}
template<class T>
inline void print(T x){
	static char st[70];short top=0;
	if(x<0)pt('-');
    do{st[++top]=x>=0?(x%10+48):(-(x%10)+48),x/=10;}while(x);
    while(top)pt(st[top--]);
}
template<class T>
inline void printsp(T x){
	static char st[70];short top=0;
	if(x<0)pt('-');
    do{st[++top]=x>=0?(x%10+48):(-(x%10)+48),x/=10;}while(x);
    while(top)pt(st[top--]);pt(32);
}
template<class T>
inline void println(T x){
	static char st[70];short top=0;
	if(x<0)pt('-');
    do{st[++top]=x>=0?(x%10+48):(-(x%10)+48),x/=10;}while(x);
    while(top)pt(st[top--]);pt(10);
}
inline void put_str(string s){
	int siz=s.size();
	for(int i=0;i<siz;++i) pt(s[i]);
	printf("\n");
}
int n,m,a[N],zh[N],fu[N],idzh[N],idfu[N],lst[N],pos[N],ans[N];
inline int lowbit(int x){return x&-x;}
struct fenwick{
	int c[N];
	fenwick(){memset(c,0,sizeof(c));}
	inline void add(int x,int k,int n){while(x<=n) c[x]+=k,x+=lowbit(x);}
	inline int sum(int x){int res=0;while(x){res+=c[x],x-=lowbit(x);}return res;}
}BIT;
signed main(){
	n=read();
	for(int i=2;i<=n+1;++i) a[i]=read();
	for(int i=2;i<=n+1;++i){
		lst[i]=pos[a[i]]+1;
		pos[a[i]]=i;
	}
	m=read();
	for(int l,r,i=1;i<=m;++i){
		l=read()+1,r=read()+1;
		idzh[r]=i,zh[r]=l;
		if(l!=2)idfu[l-1]=i,fu[l-1]=l;
	}
	for(int i=2;i<=n+1;++i){
		BIT.add(lst[i],1,n+1);
		if(idfu[i])ans[idfu[i]]-=BIT.sum(fu[i]-1);
		if(idzh[i])ans[idzh[i]]+=BIT.sum(zh[i]-1);
	}
	for(int i=1;i<=m;++i) println(ans[i]);
	return 0;
}
2023/1/17 19:16
加载中...