Cod sursa(job #2881462)

Utilizator alex2209alexPavel Alexandru alex2209alex Data 30 martie 2022 15:20:05
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#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;
}