Pagini recente » Diferente pentru utilizator/tudormaxim intre reviziile 15 si 110 | Profil REDCRAFT | Profil tomescu_alin | Monitorul de evaluare | Cod sursa (job #2588897)
#include <bits/stdc++.h>
using namespace std;
#define N ((1 << 20) + 5)
long long n;
long long v[N], A[N];
const long long solve(int k) {
long long i = 1, j = 0, nrdif = 0, rez = 0;
while(++j <= n) {
if(!A[v[j]]) ++nrdif;
++A[v[j]];
if(nrdif > k) {
rez += (long long)(j-i) * (long long)(j-i+1) / 2ll;
do {
if(!(--A[v[i]])) --nrdif;
++i;
} while(nrdif > k);
rez -= (long long)(j-i) * (long long)(j-i+1) / 2ll;
}
}
rez += (long long)(j-i) * (long long)(j-i+1) / 2ll;
while(i <= n) A[v[i]] = 0, ++i;
/*for(int i = 1; i <= 5; ++i)
cout << A[i] << ' ';
cout << endl << rez << endl;*/
return rez;
}
int main() {
ifstream fin("secv5.in");
ofstream fout("secv5.out");
int p, q;
fin >> n >> p >> q;
for(int i = 1; i <= n; ++i)
fin >> v[i];
fout << solve(q) - solve(p-1);
}