Advertisement
Guest User

P

a guest
Jan 24th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.75 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define mp make_pair
  3.  
  4. using namespace std;
  5.  
  6. int n,Q;
  7. int tab[50005], przenum[50005];
  8. int odpowiedz[100005];
  9. map <int,int> prz;
  10. int rozne [50005];
  11. int ile=0;
  12.  
  13. int WskL = -1;
  14. int WskP = -1;
  15.  
  16. priority_queue <pair <int,pair<int,pair <int,int> > > > kolej; // grupa, kon, pocz, zapytanie
  17.  
  18. void Pprzes(int a)
  19. {
  20. if (a < WskP)
  21. {
  22. while (WskP > a)
  23. {
  24. rozne[tab[WskP]]--;
  25. if (rozne[tab[WskP]] == 0) ile--;
  26. WskP--;
  27. }
  28. }
  29. else
  30. {
  31. while (WskP < a)
  32. {
  33. WskP++;
  34. rozne[tab[WskP]]++;
  35. if (rozne[tab[WskP]] == 1) ile++;
  36. }
  37. }
  38. }
  39. void Lprzes(int a)
  40. {
  41. if (a < WskL)
  42. {
  43. while (WskL > a)
  44. {
  45. WskL--;
  46. rozne[tab[WskL]]++;
  47. if (rozne[tab[WskL]] == 1) ile++;
  48. }
  49. }
  50. else
  51. {
  52. while (WskL < a)
  53. {
  54. rozne[tab[WskL]]--;
  55. if (rozne[tab[WskL]] == 0) ile--;
  56. WskL++;
  57. }
  58. }
  59. }
  60.  
  61. int main()
  62. {
  63. ios_base::sync_with_stdio(0);
  64. cin.tie(0);
  65. cout.tie(0);
  66. cin>>n;
  67. for (int i=0;i<n;i++)
  68. {
  69. cin>>tab[i];
  70. przenum[i] = tab[i];
  71. }
  72.  
  73. sort(przenum, przenum+n);
  74. int licz = 1;
  75. for (int i=0;i<n;i++)
  76. {
  77. prz[przenum[i]] = licz;
  78. if (przenum[i] != przenum[i+1]) licz ++;
  79. }
  80. for (int i=0;i<n;i++)
  81. {
  82. tab[i] = prz[tab[i]];
  83. }
  84.  
  85. int pierw = sqrt(n);
  86. cin>>Q;
  87. for (int q=0;q<Q;q++)
  88. {
  89. int a,b;
  90. cin>>a>>b;
  91. kolej.push(mp(a/pierw,mp(b,mp(a,q))));
  92. }
  93. while (!kolej.empty())
  94. {
  95. bool czy = 0;
  96. int pocz = kolej.top().second.second.first - 1;
  97. int kon = kolej.top().second.first - 1;
  98. int zapytanie = kolej.top().second.second.second;
  99. if (pocz == -1 && tab[0]!=0) czy = 1, pocz = 0;
  100. kolej.pop();
  101.  
  102. Pprzes(kon);
  103. Lprzes(pocz);
  104. odpowiedz[zapytanie] = ile + czy;
  105. }
  106.  
  107. for (int i=0;i<Q;i++)
  108. {
  109. cout<<odpowiedz[i]<<"\n";
  110. }
  111.  
  112. return 0;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement