Pagini recente » Cod sursa (job #1995703) | Monitorul de evaluare | Cod sursa (job #575061) | Cod sursa (job #2197748) | Cod sursa (job #1554619)
#include <fstream>
#include <unordered_map>
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
unordered_map<unsigned int, int> maparaie;
int n,l,u;
int a[101];
unsigned int nrSecv(int x) // numara care subsecvente cu pana la L elemente distincte exista
{
maparaie.clear();
unsigned int crnti = 1, sol = 0;
for(int i = 1; i <= n; i++)
{
++maparaie[a[i]];
while(maparaie.size() > x)
{
--maparaie[a[crnti]];
if(maparaie[a[crnti]] == 0)
maparaie.erase(a[crnti]);
++crnti;
}
sol += i - crnti + 1; // la fiecare numar adaugat toate mai apar i subsecvente(la fiecare subsecventa actuala se adauga un nou elemnet)
} // se scade crnti pt cazul in care exista subsecvente mai lungi ce trebuie scurtate
// crnti pleaca de la 1 pentu a se pastra proprietatea de subsecventa
return sol;
}
int main()
{
f >> n >> l >> u;
for(int i = 1; i <= n; i++)
f >> a[i];
g << nrSecv(u) - nrSecv(l - 1) << "\n";
return 0;
}