Cod sursa(job #1737020)

Utilizator cubaLuceafarul cuba Data 3 august 2016 03:32:41
Problema Secventa 5 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
const int NMAX = 1048580;
long long a[NMAX], tmp[NMAX];
int viz[NMAX];
inline long long Solve(int x, int N) {
    for(int i = 1; i <= NMAX; i++) {
        viz[i] = 0;
    }
    int distincte = 0, j = 1;
    long long secv = 0;
    for(int i = 1; i <= N; i++){
        viz[a[i]]++;
        if(viz[a[i]] == 1) {
            distincte++;
        }
        if(distincte > x)
        {
            while(distincte > x && j <= i) {
                viz[a[j]]--;
                if(viz[a[j]] == 0) {
                    distincte--;
                }
                j++;
            }
        }
        secv += (i - j + 1);
    }
    return secv;

}
int main()
{
    int n, L , U;
    f>> n >> L >> U;
    for(int i = 1; i <= n; i++) {
        f>> a[i];
        tmp[i] = a[i];
    }
    int dist = 1;
    sort(tmp+1,tmp+n+1);
    for(int i = 1; i <= n; i++) {
        if(tmp[i] != tmp[dist-1]) {
            tmp[dist++] = tmp[i];
        }
    }
    for(int i = 1; i <= n; i++) {
        a[i] = lower_bound(tmp+1,tmp+n+1,a[i]) - tmp;
    }

    g<< Solve(U,n) - Solve(L-1,n)<<"\n";
    return 0;
}