Pagini recente » Cod sursa (job #2271031) | Concursuri organizate de infoarena | Cod sursa (job #515219) | Cod sursa (job #2380508) | Cod sursa (job #3122814)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
const int NMAX=(1<<20)+1;
struct Element
{
unsigned val;
int poz;
};
Element v[NMAX];
int N,w[NMAX],F1[NMAX],F2[NMAX];
bool comp(const Element& x, const Element& y)
{
return x.val<y.val;
}
void normalizare()
{
sort(v+1,v+N+1,comp);
int x=1;
w[v[1].poz]=1;
for(int i=2;i<=N;i++)
{
if(v[i].val!=v[i-1].val)
++x;
w[v[i].poz]=x;
}
}
long long calcul(int dif,int F[])
{
long long nrSec=0;
int nrDif=0,p=1,i;
for(i=1;i<=N;i++)
F[i]=0;
for(i=1;i<=N;i++)
{
if(++F[w[i]]==1)
++nrDif;
while(nrDif>dif&&p<=i)
{
if(--F[w[p]]==0)
--nrDif;
++p;
}
nrSec+=i-p+1;
}
return nrSec;
}
int main()
{
int L,U;
f>>N>>L>>U;
for(int i=1;i<=N;i++)
{
f>>v[i].val;
v[i].poz=i;
}
normalizare();
g<<calcul(U,F1)-calcul(L-1,F2);
f.close();
g.close();
return 0;
}