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("fsecv.in");
- ofstream fout("fsecv.out");
- int block, N, Q, a[NMAX], answers[NMAX], current_answer; ///ASA PROGRAMUL ESTE OK, DAR INEFICIENT ...
- /// POATE REUSESTI TU ......
- /// NU ARATA CORECT current_answer .... IN REST FACE PERFECT FRECVENTA PE INTEROGARE ....
- struct Query
- {
- int L, R, index, k; /// index ESTE NR. DE ORDINE A INTEROGARII, IAR k ESTE VALOAREA CU CARE TREBUIE COMPARATA FRECVENTA ...
- };
- Query queries[NMAX];
- unordered_map<int, int>freq; /// PENTRU FRECVENTA
- bool compare(Query x, Query y) /// PENTRU SORTAREA INTEROGARILOR CONFORM INDICATIILOR ........
- {
- if(x.L / block != y.L / block)
- return x.L / block < y.L / block;
- return x.R < y.R;
- }
- inline void add(int x, int v) /// ASTA-I FUNCTIA DE ADAUGARE ....
- {
- freq[x]++;
- /** if(freq[x]==v) ACEASTA ESTE PARTEA CU CARE AR TREBUI FACUTA INLOCUIREA, DAR NU-I OK .....
- current_answer++;*/
- }
- inline void remove(int x, int v) /// STERGEREA FRECVENTELOR x ESTE NUMARUL DIN INTEROGARE, IAR v ESTE k
- {
- freq[x]--;
- /** if(freq[x]==v) ACEASTA ESTE PARTEA CU CARE AR TREBUI FACUTA INLOCUIREA, DAR NU-I OK .....SI NU STIU CUM ....
- current_answer++;
- else if(freq[x]==v-1)
- current_answer--;*/
- }
- int main()
- {
- fin>>N>>Q;
- for(int i=0; i<N; i++)
- fin>>a[i];
- for(int i=0; i<Q; i++)
- {
- fin>>queries[i].L>>queries[i].R>>queries[i].k;
- queries[i].L--; queries[i].R--;
- queries[i].index=i;
- }
- block = (int)sqrt(N);
- sort(queries, queries + Q, compare);
- int mo_left = 0, mo_right = -1;
- for(int i = 0; i < Q; i++)
- {
- int left = queries[i].L;
- int right = queries[i].R;
- int val = queries[i].k;
- while(mo_right < right)
- {
- mo_right++;
- add(a[mo_right], val);
- }
- while(mo_right > right)
- {
- remove(a[mo_right], val);
- mo_right--;
- }
- while(mo_left < left)
- {
- remove(a[mo_left], val);
- mo_left++;
- }
- while(mo_left > left)
- {
- mo_left--;
- add(a[mo_left], val);
- }
- /// ACESTA ESTE PARTEA CARE AR TREBUI INLOCUITA CA SA FIE EFICIENTA REZOLVAREA ....
- current_answer=0;
- for(auto i : freq)
- if(i.second==val)
- current_answer++;
- /// PANA AICI ....
- answers[queries[i].index] = current_answer;
- }
- for(int i = 0; i < Q; i++)
- fout << answers[i] << "\n";
- return 0;
- }
Add Comment
Please, Sign In to add comment