Advertisement
sadov_a

Untitled

Mar 31st, 2020
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #pragma GCC optimize("no-stack-protector")
  4. #pragma GCC optimize("unroll-loops")
  5. #pragma GCC optimize("fast-math")
  6. #pragma GCC optimize("vpt")
  7. #pragma GCC optimize("Ofast")
  8. mt19937 rnd(27292);
  9. //#define int long long
  10. #define forn(i, n) for (int i = 0; i < (int)n; i++)
  11. #define firn(i, n) for (int i = 1; i < (int)n; i++)
  12. #define all(v) v.begin(), v.end()
  13. //const long long mod = 998244353;
  14. //int MAX = 30000;
  15. const int N = 500'005, C = 22;
  16. vector<int> b[N];
  17. int used[N];
  18. signed main() {
  19. cin.tie(NULL);
  20. ios_base::sync_with_stdio(false);
  21. int n, q;
  22. cin >> n >> q;
  23. vector<int> a(n);
  24. forn(i, n) {
  25. cin >> a[i];
  26. b[a[i]].push_back(i);
  27. }
  28. vector<int> tt(C);
  29. forn(i, C) tt[i] = rnd();
  30. firn(w, q + 1) {
  31. int l, r;
  32. cin >> l >> r;
  33. l--;
  34. int ans = 0, sz = (r - l) / 2;
  35. forn(z, C) {
  36. int c = a[rnd() % (r - l) + l];
  37. if (used[c] < w && (int)b[c].size() * 2 > r - l) {
  38. used[c] = w;
  39. int x1 = lower_bound(all(b[c]), l) - b[c].begin() - 1;
  40. if (b[c].size() > x1 + sz + 1 && b[c][x1 + sz + 1] < r) {
  41. ans = c;
  42. break;
  43. }
  44. }
  45. }
  46. cout << ans << '\n';
  47. }
  48. return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement