Cod sursa(job #2795136)

Utilizator SeracovanuEdwardSeracovanu Edward SeracovanuEdward Data 6 noiembrie 2021 00:09:47
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>
#define MOD 666013
#define NMAX (1<<21)
using namespace std;
int n,l,u;
unsigned int v[NMAX];
vector <pair<unsigned int,unsigned int>> A[MOD+1];
int adauga(unsigned int val,int &k){
int i,limita=A[val%MOD].size(),r=val%MOD;
for(i=0;i<limita;i++)
    if(A[r][i].first==val){
        A[r][i].second++;
        return 0;
    }
A[r].push_back(make_pair(val,1));
k++;
}
int sterge(unsigned int val,int &k){
int i,limita=A[val%MOD].size(),r=val%MOD;
for(i=0;i<limita;i++){
if(A[r][i].first==val){
    A[r][i].second--;
    if(A[r][i].second==0){
        k--;
        swap(A[r][i],A[r][limita-1]);
        A[r].pop_back();
        return 0;
    }
}
}
}
long long int solutie(unsigned int val){
for(int i=0;i<=MOD;i++)
    A[i].clear();
int j=1,k=0,rez=0;
for(int i=1;i<=n;i++){
    adauga(v[i],k);
    while(k>val){
        sterge(v[j],k);
        j++;
    }
    rez=rez+1LL*(i-j+1);
}
return rez;
}
int main()
{
    freopen("secv5.in","r",stdin);
    freopen("secv5.out","w",stdout);
    scanf("%d%d%d",&n,&l,&u);
    for(int i=1;i<=n;i++)
        scanf("%u",&v[i]);
    printf("%lld",solutie(u)-solutie(l-1));
}