Pagini recente » Rating valean alex (valeanalex19) | Cod sursa (job #497852) | Cod sursa (job #835798) | Cod sursa (job #1319682) | Cod sursa (job #1554627)
#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;
unsigned int a[1 << 20 + 1];
long long nrSecv(int x) // numara care subsecvente cu pana la L elemente distincte exista
{
maparaie.clear();
long long 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);
return 0;
}