Pagini recente » Cod sursa (job #732721) | Cod sursa (job #1929499) | Cod sursa (job #571371) | Cod sursa (job #2062760) | Cod sursa (job #1770360)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MOD 666013
#define MAX 1<<20
#include <algorithm>
#include <ctype.h>
#define BUF_SIZE 1 << 17//parsarea intrarii (:¬)
using namespace std;
int pos = BUF_SIZE;
FILE *fin, *fout;
char buf[BUF_SIZE];
inline char nextch(){
if(pos==BUF_SIZE) fread(buf, BUF_SIZE, 1, fin), pos=0;
return buf[pos++];
}
inline int read(){
int x=0;
char ch=nextch();
while(!isdigit(ch)) ch=nextch();
while(isdigit(ch)){
x=10*x+ch-'0';
ch=nextch();
}
return x;
}
int next[MAX], lista[MOD];int cp[MAX];
struct elem {
int val;
int pos;
};
elem v1[MAX];
int n, l, u;
bool cmp(elem A, elem B) {
return A.val < B.val;
}
int vf[MAX];
long long secventa5(int u) {
long long ans = 0LL;
int i, j, dist = 0;
memset(vf, 0, sizeof(vf));
for (i = j = 0; i < n; ++i) {
if (vf[cp[i]] == 0)
++dist;
vf[cp[i]]++;
while (dist > u) {
vf[cp[j]]--;
if (vf[cp[j]] == 0)
--dist;
++j;
}
ans += 1LL*(i - j + 1);
}
return ans;
}
int main() {
fin = fopen("secv5.in", "r");
fout = fopen("secv5.out", "w");
n = read();
l = read();
u = read();
int i;
for(i = 0;i < n;i++) {
v1[i].val = read();
v1[i].pos = i;
}
std::sort(v1, v1+n,cmp);
int norm;
norm = 1;
cp[v1[0].pos] = 1;
for (i = 1; i < n; i++) {
if(v1[i - 1].val < v1[i].val)
norm++;
cp[v1[i].pos] = norm;
}
fprintf(fout, "%lld",secventa5(u) - secventa5(l - 1));
fclose(fin);
fclose(fout);
return 0;
}