77pts求助
查看原帖
77pts求助
278371
Programmer_juruo楼主2021/1/23 13:11
/*
problem :
created : Programmer_juruo
*/

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

#define N 10000005
#define lowbit(x) x & (-x)
#define Rep(i, n) for(int i = 1; i <= n; i++)
#define rep(i, a, n) for(int i = a; i <= n; i++)
#define Rep2(i, n) for(int i = 0; i < n; i++)
#define dbg(x) cout << #x ":" << x << endl;
#define Se second
#define Fi first
#define Mp make_pair
#define Pb push_back
#define int long long
typedef pair<int, int> Pii;
typedef priority_queue<int> Pq;
typedef long long ll;

int n, m;

inline int Read() {
	int y = 0, f = 1;char c = getchar();
	while(!isdigit(c)){if(c == '-') f = -1;c = getchar();}
	while(isdigit(c)) {y = y*10 + (c - '0'), c = getchar();}
	return y*f;
}
inline void read(int &x){x = Read();}
int tr[N];

void add(int p, int val){for(int i = p;i <= n * 2;i += lowbit(i))tr[i] += val;return;}
int Query(int p){int res = 0;for(int i = p;i >= 1;i -= lowbit(i))res += tr[i];return res;}

int a[N]; 	
struct Node {
	int l, r, x;
}T[N];
int ans[N];
bool cmp(Node x, Node y) {
	return x.r < y.r;
}
map<int,int> Map; 
void work() {
	n = Read();
	Rep(i, n) {
		cin >> a[i];
	}
	m = Read();
//	cout << "*";
	Rep(i, m) {
		T[i].l = Read(), T[i].r = Read();
		T[i].x = i;
	}
//	cout << "(=*";
	sort(T+1, T+1+n, cmp);
	int nxt = 1;
	Rep(i, n){
		rep(j, nxt, T[i].r) {
			if(Map[a[j]]) {
				add(Map[a[j]], -1);
			}
			Map[a[j]] = j;
			add(j, 1);
		}
		ans[T[i].x] = Query(T[i].r) - Query(T[i].l-1);
		nxt = T[i].r+1;
	}
	Rep(j, m) {
		printf("%d\n", ans[j]);
	}
}

signed main() {
  //freopen("1.in", "r", stdin);
  //freopen("1.out", "w", stdout);
  int T = 1;

  //cin >> T;

  while(T--) {
  	work();
  }

  return 0;
}
*/

2021/1/23 13:11
加载中...