Pagini recente » Cod sursa (job #2027281) | Cod sursa (job #1856512) | Cod sursa (job #680285) | Cod sursa (job #2303565) | Cod sursa (job #1153936)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in( "secv5.in" );
ofstream out( "secv5.out" );
const int NMAX=( 1<<20 )+2;
int n, l, u;
unsigned int ve[NMAX];
int st, dr, act;
struct norm
{
unsigned int val;
int pos;
bool operator <(const norm &A) const
{
return val < A.val;
}
};
norm v[NMAX];
int poz[NMAX];
long long rasp(int p)
{
long long rez = 0LL;
for(int i = 0; i<NMAX; i++)
poz[i] = 0;
st = 1;
dr = 0;
act = 0;
while (dr<=n && act<=p)
{
++dr;
if (++poz[ve[dr]]==1)
++act;
}
rez += dr - st;
if (--poz[ve[st]] == 0)
--act;
++st;
while (dr<=n)
{
while(act>p)
{
rez += dr - st;
if (--poz[ve[st]]==0)
--act;
++st;
}
while(dr<=n && act<=p)
{
++dr;
if (++poz[ve[dr]] == 1)
++act;
}
}
while (st<=n)
{
rez += dr - st;
++st;
}
return rez;
}
int main()
{
int player_unu=0;
in>>n>>l>>u;
for(int i = 1; i<=n; i++)
{
in>>ve[i];
v[i].val = ve[i];
v[i].pos = i;
}
sort(v + 1, v + n + 1);
for (int i = 1; i<=n; i++)
{
if(v[i].val==v[i-1].val)
ve[v[i].pos] = ve[v[i-1].pos];
else
ve[v[i].pos] = ve[v[i-1].pos] + 1;
}
out<<rasp(u) - rasp(l-1)<<'\n';
return player_unu;
}