Pagini recente » Cod sursa (job #722358) | Cod sursa (job #2644865) | Cod sursa (job #599438) | Cod sursa (job #1127144) | Cod sursa (job #1174103)
#include <fstream>
#include <vector>
#define mod 666013
#define total (1<<20)+5
using namespace std;
struct norme
{
int r,y;
} v[total];
int n,l,u,i,k,j,tot=1,p[total];
vector <norme> x[mod];
vector <norme>::iterator it;
inline void adauga(norme rachi)
{
x[rachi.r%mod].push_back(rachi);
}
inline int cauta(int k)
{
int zum=k%mod;
for(it=x[zum].begin();it!=x[zum].end();it++)
{
if(it->r==k) return it->y;
}
return 0;
}
inline int secv(int x)
{
int nr=1,sol=1,last=0;
p[v[0].y]=1;
for(i=1;i<n;i++)
{
if(p[v[i].y]==0) nr++,p[v[i].y]=1;
else p[v[i].y]++;
if(nr>x)
{
while(nr!=x)
{
p[v[last].y]--;
if(p[v[last].y]==0) nr--;
last++;
}
}
sol=sol+i-last+1;
}
for(i=0;i<n;i++) p[v[i].y]=0;
return sol;
}
ifstream fin("secv5.in");
ofstream fout("secv5.out");
int main()
{
fin>>n>>l>>u;
for(i=0;i<n;i++)
{
fin>>k;
v[i].r=k;
v[i].y=cauta(k);
if(v[i].y==0) v[i].y=tot,tot++;
adauga(v[i]);
}
fout<<secv(u)-secv(l-1);
}