Pagini recente » Cod sursa (job #2676663) | Cod sursa (job #1149887) | Cod sursa (job #2725235) | Cod sursa (job #1722774) | Cod sursa (job #1141424)
#include<fstream>
#include<vector>
#define MOD 666013
#define NMAX 1048600
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
struct pereche
{
int nou, vechi;
};
int n, st, dr, rez, a[NMAX], frst[NMAX], frdr[NMAX];
long long sol;
vector<pereche> H[MOD];
int gaseste(int x)
{
int y=x%MOD, lim, i;
lim=H[y].size();
for (i=0; i<lim; ++i)
if (x==H[y][i].vechi)
return H[y][i].nou;
return 0;
}
void Adauga(int vechi, int nou)
{
pereche aux;
aux.vechi=vechi; aux.nou=nou;
H[vechi%MOD].push_back(aux);
}
void Citeste()
{
int i, x, nr=0, pz;
f>>n>>st>>dr;
for (i=1; i<=n; ++i)
{
f>>x;
pz=gaseste(x);
if (!pz)
{
++nr; a[i]=nr;
Adauga(x, nr);
}
else a[i]=pz;
}
}
void Solve(int x, int fr[], int stare)
{
int i, nr=0, p=1;
for (i=1; i<=n; ++i)
{
if (fr[a[i]]==1) fr[a[i]]++;
else
{
fr[a[i]]=1;
if (nr<=x) ++nr;
while (nr>x && a[p]==a[p+1]) ++p;
if (nr>x) ++p;
if (nr>x) --nr;
}
sol+=stare*(i-p+1);
}
}
void Scrie()
{
g<<sol<<"\n";
}
int main()
{
Citeste();
Solve(dr, frdr, 1);
Solve(st-1, frst, -1);
Scrie();
f.close();
g.close();
return 0;
}