Cod sursa(job #2881424)

Utilizator ctimburCristina T ctimbur Data 30 martie 2022 15:01:22
Problema Secventa 5 Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>
#include <iostream>
#include <vector>
#include <string.h>
#include <map>
#include <algorithm>
using namespace std;


const int nmax = 1 << 20;
int n, l, u, i, j, k;
unsigned x[nmax];
vector <pair<unsigned, int>> lista;
char a[nmax];

long long f(int k){
    int l, r, y = 0; 
    long long nr = 0;
	if (k == 0)
		return 0;

	memset(a, 0, sizeof(a));
	for (l = r = 0; r < n; r++){
		if (!a[x[r]]){
			y++;
        }
		a[x[r]]++;
		for (int b=0; y > k; l++){
			a[x[l]]--;
			if (!a[x[l]])
				y--;
		}
		nr += r - l + 1;
	}
	return nr;
}


int solve(int u, int l){
    return f(u) - f(l-1);
}

int main(){
    freopen("secv5.in", "r", stdin);
    freopen("secv5.out", "w", stdout);

    scanf("%d %d %d", &n, &l, &u);
    for (i = 0; i < n; i++){
        scanf("%u", x+i);
        lista.push_back(make_pair(x[i], i));
    }

    sort(lista.begin(), lista.end());
    for (i = 0, j = 0; i < n; ++i){
        if (i > 0 && lista[i].first != lista[i - 1].first)
            j++;
        x[lista[i].second] = j;
    }

    printf("%lld", solve(u,l));
    return 0;
}