Pagini recente » Cod sursa (job #1292605) | Cod sursa (job #2160257) | Cod sursa (job #26005) | Cod sursa (job #388854) | Cod sursa (job #1141483)
#include<fstream>
#include<vector>
#define MOD 9319
#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], fr[2][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 ord, long long stare)
{
int i, nr=0, p=1;
for (i=1; i<=n; ++i)
{
if (fr[ord][a[i]]) fr[ord][a[i]]++;
else
{
fr[ord][a[i]]=1;
if (nr<=x) ++nr;
while (p<i && nr>x)
{
if (fr[ord][a[p]]==1) --nr;
--fr[ord][a[p]]; ++p;
}
if (nr>x) --nr;
}
sol+=stare*(i-p+1);
}
}
void Scrie()
{
g<<sol<<"\n";
}
int main()
{
Citeste();
Solve(dr, 0, 1);
Solve(st-1, 1, -1);
Scrie();
f.close();
g.close();
return 0;
}