Submission #518736

#TimeUsernameProblemLanguageResultExecution timeMemory
518736ak2006Poklon (COCI17_poklon)C++14
0 / 140
5098 ms63680 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using vb = vector<bool>; using vvb = vector<vb>; using vi = vector<int>; using vvi = vector<vi>; using vl = vector<ll>; using vvl = vector<vl>; using vc = vector<char>; using vvc = vector<vc>; using vs = vector<string>; const ll mod = 1e9 + 7,inf = 1e18; #define pb push_back #define fast ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); void setIO() { fast; } const int rn = 700; map<int,int>freq; int ans1; bool cmp(vi&a,vi&b) { if ((a[0]/rn) != (b[0]/rn)) return ((a[0]/rn) < (b[0]/rn)); return a[1] < b[1]; } void add(int i) { if (freq[i] == 1) ans1++; if (freq[i] == 2) ans1--; freq[i]++; } void sub(int i) { if (freq[i] == 3) ans1++; if (freq[i] == 2) ans1--; freq[i]--; } int main() { setIO(); int n,q; cin>>n>>q; vi a(n + 1),ans(q); vvi queries(q,vi(3)); for (int i = 1;i<=n;i++) cin>>a[i]; for (int i = 0;i<q;i++){ int l,r; cin>>l>>r; queries[i][0] = l,queries[i][1] = r; queries[i][2] = i; } sort(queries.begin(),queries.end(),cmp); int curL = 1,curR = 0; for (int i = 0;i<q;i++){ while (curL > queries[i][0]){ curL--; add(a[curL]); } while (curR < queries[i][1]){ curR++; add(a[curR]); } while (curL < queries[i][0]){ sub(curL); curL++; } ans[queries[i][2]] = ans1; while (curR > queries[i][1]){ sub(curR); curR--; } } for (int i = 0;i<q;i++)cout<<ans[i]<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...