Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define pfin(a) printf("%d\n",a);
- #define pfln(a) printf("%lld\n",a);
- #define pfis(a) printf("%d ",a);
- #define pfls(a) printf("%lld ",a);
- #define sfi(a) scanf("%d",&a);
- #define sfl(a) scanf("%lld",&a);
- #define fast ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
- #define f(i,a,b) for(int i=a;i<b;i++)
- #define pb(a) push_back(a);
- #define mp(a,b) make_pair(a,b)
- #define ll long long
- #define F first
- #define S second
- #define vi vector<int>
- #define vc vector<char>
- const ll mod=1e9+7;
- const int N=1e5+5;
- const int BLOCK=320;// length of BLOCK size
- const int BKLN=316;// Length of array of buckets
- vi bckt[BKLN];// bckt denoted frequency of frequency array of that particular bucket
- int arr[N];
- struct util
- {
- int l,r,x,idx;
- };
- bool cmp(util a,util b)
- {
- int val1=a.l/BLOCK;
- int val2=b.l/BLOCK;
- if(val1!=val2)
- return val1<val2;
- if(val1%2==1)
- return a.r<b.r;
- return b.r>a.r;
- }
- int freq[N];
- void add(int idx)
- {
- int bkt=arr[idx]/BLOCK;
- bckt[bkt][freq[arr[idx]]]--;
- freq[arr[idx]]++;
- bckt[bkt][freq[arr[idx]]]++;
- return;
- }
- void remove(int idx)
- {
- int bkt=arr[idx]/BLOCK;
- bckt[bkt][freq[arr[idx]]]--;
- freq[arr[idx]]--;
- bckt[bkt][freq[arr[idx]]]++;
- return;
- }
- void solve()
- {
- memset(freq,0,sizeof(freq));
- f(i,0,BKLN+5)
- bckt[i].clear();
- f(i,0,BKLN)
- bckt[i].resize(N+5);
- int n;
- sfi(n)
- f(i,0,n)
- sfi(arr[i])
- int q;
- sfi(q)
- util query[q];
- f(i,0,q)
- {
- sfi(query[i].l)
- sfi(query[i].r)
- sfi(query[i].x)
- query[i].idx=i;
- }
- sort(query,query+q,cmp);
- int mleft=0,mright=-1;
- int ans[q];
- memset(ans,-1,sizeof(ans));
- f(i,0,q)
- {
- int left=query[i].l;
- int right=query[i].r;
- while(mright<right)
- {
- mright++;
- add(mright);
- }
- while(mright>right)
- {
- remove(mright);
- mright--;
- }
- while(mleft<left)
- {
- remove(mleft);
- mleft++;
- }
- while(mleft>left)
- {
- mleft--;
- add(mleft);
- }
- f(j,0,BKLN)
- {
- if(bckt[j][query[i].x]>0)
- {
- int l=j*BKLN;
- while(freq[l]!=query[i].x)
- {
- l++;
- }
- ans[query[i].idx]=l;
- break;
- }
- }
- }
- f(i,0,q)
- pfin(ans[i])
- return;
- }
- int main()
- {
- int t;
- sfi(t)
- while(t--)
- solve();
- return 0;
- }
Advertisement
Advertisement
Advertisement
RAW Paste Data
Copied
Advertisement