Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // author : ssh.
- #include <bits/stdc++.h>
- using namespace std;
- // defines...
- #define all(a) a.begin(), a.end()
- #define pb push_back
- #define bp(a, i) binary_search(all(a), i)
- #define int long long
- // defines...
- // mods and consts...
- string pi = "3141592653589793238462643383279502884";
- typedef long long ll;
- typedef long double ld;
- long long inf = 1e15;
- const int mod = 1e9 + 7;
- const int N = 3e5 + 1;
- ld eps = 0.00001;
- // mods and consts...
- struct node{
- int x, ev;
- };
- bool cmp(node a, node b){
- return (a.x != b.x ? a.x < b.x : a.ev > b.ev);
- }
- struct node2{
- int f, s, t;
- };
- int t[N * 4];
- int arr[N], cnt[N];
- //void build(int v, int tl, int tr){
- // if(tl == tr){
- // t[v] = cnt[tl];
- // return;
- // }
- // int tm = (tl + tr) / 2;
- // build(v * 2 + 1, tl, tm);
- // build(v * 2 + 2, tm + 1, tr);
- // t[v] = t[v * 2 + 1] + t[v * 2 + 2];
- //}
- void change(int v, int tl, int tr, int pos, int x){
- if(tl ==tr){
- t[v] = x;
- return;
- }
- int tm = (tl + tr) / 2;
- if(pos > tm){
- change(v * 2 + 2, tm + 1, tr, pos, x);
- } else {
- change(v * 2 + 1, tl, tm, pos, x);
- }
- t[v] = t[v * 2 + 1] + t[v * 2 + 2];
- }
- int get(int v, int tl, int tr, int l, int r){
- if(l > tr || r < tl){
- return 0;
- }
- if(l <= tl && tr <= r) return t[v];
- int tm = (tl + tr) / 2;
- return get(v * 2 + 1, tl, tm, l, r) + get(v * 2 + 2, tm + 1, tr, l, r);
- }
- void solve() {
- int n;
- cin >> n;
- for(int i = 0; i < n; ++i) cin >> arr[i];
- map<int,vector<node2>>help;
- map<pair<int,int>, vector<int>>st;
- int q;
- cin >> q;
- int j = 0;
- vector<int>ans(q);
- while(q--){
- int l, r;
- cin >> l >> r;
- --l, --r;
- help[r].pb({l, r, j});
- ++j;
- }
- map<int,int>pred;
- for(int i = 0; i < n; ++i){
- if(pred.find(arr[i]) != pred.end()){
- change(0, 0, n, pred[arr[i]], 0);
- }
- pred[arr[i]] = i;
- change(0, 0, n, i, 1);
- for(auto &c : help[i]){
- int l = c.f, r = c.s;
- int res = get(0, 0, n, l, r);
- ans[c.t] = res;
- }
- }
- for(int i = 0; i < ans.size(); ++i) cout << ans[i] << '\n';
- }
- signed main() {
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- cout.tie(nullptr);
- int tt = 1;
- //cin >> tt;
- while (tt--) {
- solve();
- }
- }
- //1 5
- // 2 6
- // 3 4
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement