Pagini recente » Cod sursa (job #2057696) | Cod sursa (job #59814) | Cod sursa (job #402179) | Cod sursa (job #1563249) | Cod sursa (job #2482820)
#include <iostream>
#include <fstream>
#include <cstring>
#include <unordered_map>
#include <deque>
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
deque<unsigned int>deck;
unsigned int n, l_min, l_max;
unsigned int a[1048600];
long long rez(unsigned int marime)
{
if (marime==0)
return 0;
unsigned int ind=0;
long long rez=0;
unordered_map<unsigned int, int>fr;
// fr[a[++ind]]++;
// deck.push_back(ind);
// while (fr.size()<=intmarime)
// {
// fr[a[++ind]]++;
// deck.push_back(ind);
// rez
// }
// fr[a[ind]]--;
// deck.pop_back();
// rez+=(deck.back()-deck.front()+1);
fr[a[++ind]]++;
deck.push_back(1);
rez++;
for(ind=2; ind<=n; ++ind)
{
fr[a[ind]]++;
deck.push_back(ind);
if (fr.size()>marime)
{
bool ok=true;
while (ok)
{
fr[a[deck.front()]]--;
if (fr[a[deck.front()]]==0)
fr.erase(a[deck.front()]), ok=false;
deck.pop_front();
}
}
rez+=(deck.back()-deck.front()+1);
}
return rez;
}
int main()
{
f >> n >> l_min >> l_max;
for (unsigned int i=1; i<=n; ++i)
f >> a[i];
g << rez(l_max)-rez(l_min-1);
return 0;
}