Cod sursa(job #2588909)

Utilizator minecraft3Vintila Valentin Ioan minecraft3 Data 25 martie 2020 16:18:26
Problema Secventa 5 Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

#define N ((1 << 20) + 5)

long long n;
long long v[N];

map<long long, int> A;

const long long solve(int k) {
    long long i = 1, j = 0, nrdif = 0, rez = 0;
    while(++j <= n) {
        if(!A[v[j]]) ++nrdif;
        ++A[v[j]];
        
        if(nrdif > k) {
            rez += (long long)(j-i) * (long long)(j-i+1) / 2ll;
            do {
                if(!(--A[v[i]])) --nrdif;
                ++i;
            } while(nrdif > k);
            rez -= (long long)(j-i) * (long long)(j-i+1) / 2ll;
        }
    }
    rez += (long long)(j-i) * (long long)(j-i+1) / 2ll;
    while(i <= n) A[v[i]] = 0, ++i;

    /*for(int i = 1; i <= 5; ++i)
        cout << A[i] << ' ';
    cout << endl << rez << endl;*/
    return rez;
}

int main() {
    ifstream fin("secv5.in");
    ofstream fout("secv5.out");

    int p, q;
    fin >> n >> p >> q;
    for(int i = 1; i <= n; ++i)
        fin >> v[i];
        
    fout << solve(q) - solve(p-1);
}