Pagini recente » Cod sursa (job #925491) | Cod sursa (job #2773183) | Cod sursa (job #2230062) | Cod sursa (job #2550209) | Cod sursa (job #2881462)
#include <bits/stdc++.h>
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
unordered_map<int, int> ap, ap2;
int n, mi, ma, v[1050000], rasp;
int main()
{
f >> n >> mi >> ma;
for(int i = 1; i <= n; ++i)
{
f >> v[i];
}
int nr = 0;
int pmi = 1;
while(nr < mi && pmi <= n)
{
int x = v[pmi];
ap[x]++;
ap2[x]++;
if(ap[x] == 1)
nr++;
pmi++;
}
pmi--;
int pma = pmi + 1;
while(nr <= ma && pma <= n)
{
int x = v[pma];
ap2[x]++;
if(ap2[x] == 1)
nr++;
pma++;
}
pma--;
int poz = 1;
rasp += pma - pmi + 1;
while(poz < n)
{
ap[v[poz]]--;
ap2[v[poz]]--;
if(ap[v[poz]] != 0)
{
if(pmi == poz)
pmi++;
}
else
{
pmi++;
while(ap[v[pmi]] != 0 && pmi <= n)
{
int x = v[pmi];
ap[x]++;
if(pmi > pma)
ap2[x]++;
pmi++;
}
if(pmi == n + 1)
{
break;
}
ap[v[pmi]] = 1;
if(pmi > pma)
{
pma = pmi;
}
if(ap2[v[poz]] == 0)
{
pma++;
while(ap[v[pma]] != 0 && pma <= n)
{
int x = v[pma];
ap2[x]++;
pma++;
}
if(pma == n + 1) {
pma = n;
}
else {
ap2[v[pma]] = 1;
}
}
}
rasp += pma - pmi + 1;
poz++;
}
rasp += pma - pmi + 1;
g << rasp;
return 0;
}