Submission #1211627

#TimeUsernameProblemLanguageResultExecution timeMemory
1211627Dan4LifePoklon (COCI17_poklon)C++20
140 / 140
251 ms28996 KiB
#include <bits/stdc++.h>
using namespace std;

#define pb push_back

const int mxN = (int)5e5+2;

int n, q, tot;
int p[mxN], ans[mxN], fen[mxN];
vector<array<int,2>> Q[mxN];
unordered_map<int,int> M;

void upd(int x, int v){ for(++x; x<mxN; x+=x&-x) fen[x]+=v; }
int sum(int x){ int s = 0; for(++x; x>0; x-=x&-x) s+=fen[x]; return s; }

int main(){
    ios_base::sync_with_stdio(false); cin.tie(0);
    cin >> n >> q; int l, r;
    for(int i = 1; i <= n; i++)
        cin >> r, p[i] = M[r], M[r]=i;
    for(int i = 0; i < q; i++)
        cin >> l >> r, Q[r].pb({l,i});
    for(int r = 1; r <= n; r++){
        upd(p[r],1), upd(p[p[r]],-2), upd(p[p[p[r]]],1);
        for(auto [l,i] : Q[r]) ans[i] = sum(r)-sum(l-1);
    }
    for(int i = 0; i < q; i++) cout << ans[i] << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...