Pagini recente » Cod sursa (job #2176921) | Cod sursa (job #1215341) | Cod sursa (job #3216271) | Cod sursa (job #2702083) | Cod sursa (job #208757)
Cod sursa(job #208757)
using namespace std;
#include <map>
#include <set>
#include <list>
#include <deque>
#include <stack>
#include <queue>
#include <cmath>
#include <cstdio>
#include <vector>
#include <string>
#include <cstdlib>
#include <utility>
#include <algorithm>
#include <functional>
#define sz size
#define f first
#define s second
#define rz resize
#define db double
#define II inline
#define pb push_back
#define mp make_pair
#define ll long long
#define SCORE 100 :)
#define C(v) C.erase( all(v) )
#define all(v) v.begin() , v.end()
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define FORit(it,v) for(it = (v).begin();it != (v).end();++it)
#define N_MAX 1<<20
#define L_MAX 1<<14
#define IN "secv5.in"
#define OUT "secv5.out"
#define MOD 1006721
//#define R 84017
char buffer[L_MAX];
int V1[N_MAX],V2[N_MAX],P[N_MAX];
unsigned int M[N_MAX];
int K(-1),N,L,U;
II unsigned int read()
{
unsigned int aux(0);
for(;buffer[K] > '9' || buffer[K] < '0';++K);
for(;buffer[K] <= '9' && buffer[K] >= '0';++K)
aux = aux * 10 + buffer[K] - '0';
return aux;
}
II void scan()
{
freopen(IN, "r",stdin);
freopen(OUT, "w",stdout);
fread(buffer,1,1<<23,stdin);
N = read();
L = read();
U = read();
FOR(i,1,N)
M[i] = read();
}
II void hash()
{
FOR(i,1,N)
M[i] = (M[i] % MOD) + (M[i] / MOD);
}
II int solve(int A)
{
int X(0),x(1),y(0);
//FOR(i,1,N)
// printf("%d ",M[i]);
memset(V1,0,sizeof(V1));
memset(V2,0,sizeof(V2));
for(int i = 1;i<=N;++i)
{
++y;
if(! (V2[ M[i] ] - V1[ M[i] ]) )
++X;
++V2[ M[i] ];
for(;X <= A;)
{
if( !(V2[ M[i+1] ] - V1[ M[i+1] ]) && X == A)
break;
P[i] = x;
++i,++y;
if(! (V2[ M[i] ] - V1[ M[i] ]) )
++X;
++V2[ M[i] ];
}
for(;X > A;)
{
if( !(V2[ M[x] ] - V1[ M[x] ] - 1) )
--X;
++V1[ M[x] ];
++x;
}
P[i] = x;
}
int rez(0);
FOR(i,1,N)
rez += (i-P[i]+1);
return rez;
}
int main()
{
scan();
hash();
printf("%d\n", solve(U) - solve(L-1) );
return 0;
}