Pagini recente » Cod sursa (job #848720) | Cod sursa (job #226821) | Cod sursa (job #1020580) | Cod sursa (job #1963687) | Cod sursa (job #2588930)
#include <bits/stdc++.h>
using namespace std;
#define N ((1 << 20) + 5)
#define DIMBUFF 100005
long long n;
long long v[N];
unordered_map<long long, int> A;
FILE *fin = fopen ("secv5.in", "r");
char buff[DIMBUFF];
int pp;
int numar() {
int val = 0;
while (!(buff[pp] >= '0' && buff[pp] <= '9')) {
pp++;
if (pp == DIMBUFF) {
fread(buff, 1, DIMBUFF, fin);
pp=0;
}
}
while (buff[pp] >= '0' && buff[pp] <= '9') {
val = val*10 + buff[pp] - '0';
pp++;
if (pp == DIMBUFF) {
fread(buff, 1, DIMBUFF, fin);
pp=0;
}
}
return val;
}
const long long solve(int k) {
long long i = 1, j = 0, nrdif = 0, rez = 0;
while(++j <= n) {
if((++A[v[j]]) == 1) ++nrdif;
if(nrdif > k) {
rez += (long long)(j-i) * (long long)(j-i+1) / 2ll;
do {
if(!(--A[v[i]])) {
--nrdif;
A.erase(v[i]);
}
++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;
A.clear();
/*for(int i = 1; i <= 5; ++i)
cout << A[i] << ' ';
cout << endl << rez << endl;*/
return rez;
}
int main() {
ofstream fout("secv5.out");
int p, q;
n = numar(); p = numar(); q = numar();
for(int i = 1; i <= n; ++i)
v[i] = numar();
fout << solve(q) - solve(p-1);
}