Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define NMAX 100005
- using namespace std;
- ifstream fin("marbles.in");
- ofstream fout("marbles.out");
- struct chestie
- {
- int first, second, wh;
- };
- vector<chestie> buckets[1005];
- int fr[NMAX], rez[NMAX], maxim, which, auMa, whi1, v[NMAX];
- inline bool cmp(chestie a, chestie b)
- {
- return a.second < b.second;
- }
- void Add(int val)
- {
- fr[val]++;
- if(fr[val] > maxim)
- {
- maxim = fr[val];
- which = val;
- }
- else if(fr[val] == maxim)
- which = min(val, which);
- }
- void AddL(int val)
- {
- if(fr[val] > auMa)
- {
- auMa = fr[val];
- whi1 = val;
- }
- else if(fr[val] == auMa)
- whi1 = min(whi1, val);
- }
- int main()
- {
- int n, m;
- fin >> n >> m;
- for(int i = 1; i <= n; ++i)
- fin >> v[i];
- int bucket = sqrt(n);
- int nrB = bucket + (bool)n % bucket;
- for(int i = 1; i <= m; ++i)
- {
- int st, dr;
- fin >> st >> dr;
- buckets[st / bucket].push_back({st, dr, i});
- }
- for(int buk = 0; buk < nrB; ++buk)
- {
- if(buckets[buk].size() > 0)
- {
- sort(buckets[buk].begin(), buckets[buk].end(), cmp);
- memset(fr, 0, sizeof(fr));
- for(int i = (buk + 1) * bucket; i <= buckets[buk][0].second; ++i)
- {
- Add(v[i]);
- AddL(v[i]);
- }
- int lim = min((buk + 1) * bucket, buckets[buk][0].second + 1);
- for(int i = buckets[buk][0].first; i < lim; ++i)
- Add(v[i]);
- rez[buckets[buk][0].wh] = which;
- for(int i = 1; i < buckets[buk].size(); ++i)
- {
- lim = min((buk + 1) * bucket, buckets[buk][i - 1].second + 1);
- for(int j = buckets[buk][i - 1].first; j < lim; ++j)
- fr[v[j]]--;
- for(int j = buckets[buk][i - 1].second + 1; j <= buckets[buk][i].second; ++j)
- AddL(v[j]);
- maxim = auMa;
- which = whi1;
- lim = min((buk + 1) * bucket, buckets[buk][i].second + 1);
- for(int j = buckets[buk][i].first; j < lim; ++j)
- Add(v[j]);
- rez[buckets[buk][i].wh] = which;
- }
- }
- }
- for(int i = 1; i <= m; ++i)
- fout << rez[i] << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement