Cod sursa(job #2047766)

Utilizator LucaSeriSeritan Luca LucaSeri Data 25 octombrie 2017 11:25:29
Problema Secventa 5 Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <bits/stdc++.h>

using namespace std;

int N;

unsigned int v[1050000];

ifstream f("secv5.in");
ofstream g("secv5.out");

long long count(int lim){
    map <unsigned int, int> fr;
    int cnt = 0;
    int st = 1;
    long long secv = 0LL;
    for(int i = 1; i <= N; ++i){
        fr[v[i]] ++;
        if(fr[v[i]] == 1) ++ cnt;
        while(cnt > lim){
            fr[v[st]] --;
            if(fr[v[st]] == 0) {fr.erase(v[st]); cnt--;}
            ++st;
        }
        secv += 1LL*(i-st+1LL);
    }
    return secv;
}
int main(){
    int l, r;
    f >> N;
    f >> l >> r;
    for(int i = 1; i <= N; ++i) f >> v[i];
    g << count(r) - count(l-1);
    return 0;
}