Pagini recente » Cod sursa (job #1245076) | Cod sursa (job #2876076) | Cod sursa (job #192134) | Cod sursa (job #1440779) | Cod sursa (job #1174099)
#include <fstream>
#include <vector>
#define mod 666013
#include <bitset>
using namespace std;
bitset <((1<<17)+10)> p;
struct norme
{
int r,y;
} v[(1<<19)+5];
int n,l,u,i,k,j,tot=1;
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,k;
p[v[0].y]=1;
for(i=1;i<n;i++)
{
if(p[v[i].y]==0) nr++,p[v[i].y]=1;
if(nr>x)
{
p[v[last].y]=0;
nr--;
k=last;
while(v[last].y==v[k].y)
{
last++;
}
}
sol+=i+1-last-1+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);
}