Cod sursa(job #1993477)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 23 iunie 2017 08:36:01
Problema Secventa 5 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;

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

const int nmax = 1048600;
int a[nmax],b[nmax],ind[nmax], freq[nmax];
int i, j, n, l, u;

bool cmp(int x, int y) {
    return a[x] < a[y];
}

long long variante(int MAX) {
    int st = 1, i, apar = 0, cate = 0;
    long long sol = 0;
    memset(freq, 0, sizeof(freq));

    for (i = 1; i <= n; i++) {
        if (freq[b[i]] == 0)
            cate++;
        freq[b[i]]++;
        while (st <= i && cate > MAX) {
            freq[b[st]]--;
            if (freq[b[st]] == 0) cate--;
            st++;
        }
        sol += (i-st+1);
    }
    return sol;
}

int main() {
    f >> n >> l >> u;
    for (i = 1; i <= n; i++)
        f >> a[i], ind[i] = i;
    sort(ind+1,ind+n+1, cmp);
    for (i = 1; i <= n; i++) {
        b[ind[i]] = b[ind[i-1]];
        if (a[ind[i]] != a[ind[i-1]])
            b[ind[i]]++;
    }
    g << variante(u) - variante(l-1);
}