Advertisement
Guest User

Untitled

a guest
Mar 24th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
CSS 1.51 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define NQ 100
  6. #define F first
  7. #define S second
  8. #define mp make_pair
  9.  
  10. typedef pair< pair< int, int >, int > query; // F.F = l, F.S = r, S = i
  11.  
  12. const int N = 100;
  13. int sqrtn = sqrt(N);
  14.  
  15. query queries[NQ];
  16. int v[N], cnt[N+1], app = 0, ans[NQ];
  17.  
  18. bool compare(const query &a, const query &b)
  19. {//define qual query vem antes, por L -> R (asc)
  20.   if( (a.F.S / sqrtn) != (b.F.S / sqrtn) )
  21.     return (a.F.S/sqrtn) < (b.F.S/sqrtn);
  22.   if(a.F.F!=b.F.F)
  23.       return a.F.F < b.F.F;
  24.   return a.S < b.S;
  25. }
  26.  
  27. void f(int pos, int op) //posicao do elemento e operaçao (entrada saida)
  28. {
  29.   int vertice = v[pos];
  30.  
  31.   if(op == 1)
  32.   {
  33.     if(cnt[vertice] == 0)
  34.       app++;
  35.   }
  36.   else
  37.   {
  38.     if(cnt[vertice] == 1)
  39.       app--;
  40.   }
  41.   cnt[vertice] += op;
  42. }
  43.  
  44.  
  45. int main(){
  46.   int n, q, l, r;
  47.   scanf("%d", &n);
  48.   for(int i = 0; i < n; ++i)
  49.   {
  50.     scanf("%d", &v[i]);
  51.   }
  52.   scanf("%d", &q);
  53.   for(int i = 0; i < q; ++i)
  54.   {
  55.     scanf("%d %d", &l, &r);
  56.     queries[i] = mp(mp(l,r), i);
  57.   }
  58.   sort(queries, queries+q, compare);
  59.  
  60.   l = 1; r = 1;
  61.   app = 0;
  62.   memset(cnt, 0, sizeof cnt);
  63.   f(l,1);
  64.   for(int i = 0; i < q; ++i)
  65.   {
  66.     int ll = queries[i].F.F;
  67.     int rr = queries[i].F.S;
  68.     int pos = queries[i].S;
  69.  
  70.     while(l > ll)
  71.       f(--l, 1);
  72.     while(r < rr)
  73.       f(++r, 1);
  74.     while(l < ll)
  75.       f(++l, -1);
  76.     while(r > rr)
  77.       f(--r, -1);
  78.  
  79.     ans[pos] = app;
  80.   }
  81.  
  82.   for(int i = 0; i < q; ++i)
  83.     cout << ans[i] << endl;
  84.  
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement