Pagini recente » Cod sursa (job #1818608) | Cod sursa (job #3162426) | Cod sursa (job #1148457) | Cod sursa (job #802817) | Cod sursa (job #2524660)
#include <bits/stdc++.h>
#define DIM (1<<20 + 5)
#define DIMBUFF 100005
using namespace std;
FILE *fin = fopen ("secv5.in", "r");
FILE *fout = fopen ("secv5.out", "w");
unordered_map <unsigned int, int> st, dr;
unsigned int n, l, r;
unsigned int v[DIM];
long long a, b, sol;
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;
}
int main(){
fread(buff, 1, DIMBUFF, fin);
n = numar(), l = numar(), r = numar();
for (int i=1; i<=n; i++){
v[i] = numar();
}
a = b = 1;
for (int i=1; i<=n; i++){
st[v[i]]++, dr[v[i]]++;
while (st.size() >= l){
st[v[a]]--;
if (st[v[a]] == 0){
st.erase (v[a]);
}
a++;
}
while (dr.size() > r){
dr[v[b]]--;
if (dr[v[b]] == 0){
dr.erase (v[b]);
}
b++;
}
sol += (i - b + 1)- (i - a + 1);
}
fprintf (fout, "%d", sol);
return 0;
}