Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- //#include<unordered_map>
- typedef long long ll;
- #define PQ priority_queue
- #define ii int,int
- using namespace std;
- const int N=100000;
- struct node
- {
- int cnt,val;
- map<ii>mp;
- node()
- {
- mp.clear();
- cnt=0,val=0;
- }
- };
- map<ii>ans;
- node tree[4*N+2];
- int ara[N+2];
- void clr()
- {
- memset(ara,0,sizeof ara);
- ans.clear();
- for(int i=0; i<=N; i++)
- {
- tree[i].mp.clear();
- tree[i].cnt=0,tree[i].val=0;
- }
- }
- pair<ii>get_max(map<ii>mp)
- {
- pair<ii>ans= {0,0};
- for(map<ii>::iterator itr=mp.begin(); itr!=mp.end(); itr++)
- {
- if(itr->second>ans.second)
- {
- ans= {itr->first,itr->second};
- }
- }
- return ans;
- }
- map<ii> operator + (map<ii>mp1,map<ii>mp2)
- {
- map<ii>::iterator itr;
- for(itr=mp1.begin(); itr!=mp1.end(); itr++)
- mp2[itr->first]+=itr->second;
- return mp2;
- }
- void build(int nx,int st,int en)
- {
- tree[nx].mp.clear();
- if(st==en)
- {
- tree[nx].mp[ara[st]]++;
- tree[nx].cnt=tree[nx].mp[ara[st]];
- tree[nx].val=ara[st];
- return;
- }
- int lt=nx*2;
- int rg=nx*2+1;
- int mid=(st+en)/2;
- build(lt,st,mid);
- build(rg,mid+1,en);
- tree[nx].mp=tree[lt].mp+tree[rg].mp;
- pair<ii>itr=get_max(tree[nx].mp);
- tree[nx].cnt=itr.second;
- tree[nx].val=itr.first;
- }
- void query(int nx,int st,int en,int lt,int rg)
- {
- if(lt>en or rg<st)
- return;
- if(st>=lt and en<=rg)
- {
- ans=ans+tree[nx].mp;
- return;
- }
- int L=nx*2;
- int R=nx*2+1;
- int mid=(st+en)/2;
- query(L,st,mid,lt,rg);
- query(R,mid+1,en,lt,rg);
- }
- int main()
- {
- freopen("input.txt","r",stdin);
- freopen("output.txt","w",stdout);
- int n,q;
- while(scanf("%d",&n)==1 and n)
- {
- //clr();
- scanf("%d",&q);
- for(int i=1; i<=n; i++)
- scanf("%d",&ara[i]);
- build(1,1,n);
- int l,r;
- while(q--)
- {
- scanf("%d %d",&l,&r);
- ans.clear();
- query(1,1,n,l,r);
- pair<ii>itr=get_max(ans);
- printf("%d\n",itr.second);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement