Pagini recente » Cod sursa (job #422952) | Cod sursa (job #2647842) | Cod sursa (job #1017316) | Cod sursa (job #878599) | Cod sursa (job #1314136)
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
#define maxn 1050000
#define mod 9319
int n ;
int L, U ;
vector <int> kush[mod] ;
vector <int> place[mod] ;
int indice ;
unsigned int ind[maxn] ;
int nr[maxn] ;
char sir[64] ;
int find_value(unsigned int x)
{
int list=x%mod ;
int len=kush[list].size();
for(int i=0; i<len; ++i)
if(kush[list][i]==x) return place[list][i];
return -1 ;
}
void insert_value(unsigned int x, int poz)
{
int ok=find_value(x);
if(ok==-1)
{
int list=x%mod;
kush[list].push_back(x);
place[list].push_back(indice);
ind[poz]=indice;
++indice;
}
else ind[poz]=ok ;
}
int numar(int nrmax)
{
int nrdif=0;
int st=-1;
int sol=0;
for(int i=0; i<n; ++i)
{
if(!nr[ind[i]]) ++nrdif;
++nr[ind[i]];
while(st<i && nrdif>nrmax )
{
++st;
--nr[ind[st]];
if(!nr[ind[st]]) --nrdif ;
}
sol+=i-st;
}
return sol;
}
int main()
{
freopen("secv5.in", "rt", stdin);
freopen("secv5.out", "wt", stdout);
scanf("%d%d%d", &n, &L, &U);
for(int i=0; i<n; ++i)
{
scanf("%s", sir);
unsigned int x=0;
for(int j=0 ; sir[j]>='0' && sir[j]<='9'; ++j)
x=x*10+(sir[j]-'0');
insert_value(x, i);
}
int sol1 = numar(U);
memset(nr, 0, sizeof(nr));
int sol2=numar(L-1);
int sol=sol1-sol2;
printf("%d\n", sol);
return 0;
}