Pagini recente » Cod sursa (job #3256117) | Cod sursa (job #1104656) | Cod sursa (job #3148486) | Cod sursa (job #3211470) | Cod sursa (job #791451)
Cod sursa(job #791451)
#include<fstream>
#include<algorithm>
using namespace std;
int n,L,U;
struct Element{int val,poz;};
Element A[1050000];
int v[1050000],viz[1050000];
inline void Citire()
{
int i;
ifstream fin("secv5.in");
fin>>n>>L>>U;
for(i=1;i<=n;i++)
{
fin>>A[i].val;
A[i].poz=i;
}
fin.close();
}
inline bool Sortare(Element A,Element B)
{
return A.val<B.val;
}
inline void Normalizare()
{
int i,poz,x;
sort(A+1,A+n+1,Sortare);
for(i=1;i<=n;i++)
{
x=A[i].val;
poz=i;
v[A[i].poz]=poz;
while(i<n && A[i+1].val==x)
{
i++;
v[A[i].poz]=poz;
}
}
}
inline void Reset(int v[])
{
int i;
for(i=1;i<=n;i++)
v[i]=0;
}
inline long long Nr(int size)
{
long long sol=0;
int st=1,dr=1,now=0;
while(dr<=n)
{
if(viz[v[dr]]==0)
now++;
viz[v[dr]]++;
while(now>size)
{
if(viz[v[st]]==1)
now--;
viz[v[st]]--;
st++;
}
sol+=(long long)(dr-st+1);
dr++;
}
Reset(viz);
return sol;
}
inline void Afisare()
{
ofstream fout("secv5.out");
fout<<(Nr(U)-Nr(L-1))<<"\n";
fout.close();
}
int main()
{
Citire();
Normalizare();
Afisare();
return 0;
}