0 pts 样例过 求助
查看原帖
0 pts 样例过 求助
817524
CR400BFAZ5254楼主2024/8/18 13:52
#include<bits/stdc++.h>
#define MAXN 1000010
using namespace std;
int a[MAXN],ton[MAXN];
int tree[MAXN<<2];
int n,m;
char gc() {
  // return getchar();
  const int SZ = 1 << 17;
  static char buf[SZ], *S, *T;
  if(S == T) T = (S = buf) + fread(buf, 1, SZ, stdin);
  return S == T ? EOF : *S ++;
}
template<class T>
void read(T &x) {
  x = 0; char c = gc(); bool na = 0;
  for(; !isdigit(c); c = gc()) na |= c == '-';
  for(; isdigit(c); c = gc()) x = x * 10 + (c & 15);
  if(na) x = -x;
}
int lowbit(int x){return x&-x;}
void update(int x,int k){
    for(int i=x;i<=n;i+=lowbit(i)) tree[i]+=k;
}
int query(int x){
    int ans=0;
    for(int i=x;i>=1;i-=lowbit(i)){
        ans+=tree[i];
    }
    return ans;
}
void init(){
    // kgxmemset(tree,0,sizeof tree);
    for(int i=1;i<=n;i++){
        if(ton[a[i]]==0){
            ton[a[i]]=i;
            update(i,1);
        }else{
            update(ton[a[i]],-1);
            ton[a[i]]=i;
            update(i,1);
        }
    }
}
int main(){
    read(n);
    for(int i=1;i<=n;i++) read(a[i]);
    init();
    read(m);
    for(int i=1;i<=m;i++){
        int l,r;
        read(l),read(r);
        printf("%d\n",query(r)-query(l-1));
    }



    return 0;
}
2024/8/18 13:52
加载中...