Pagini recente » Istoria paginii runda/simulare_oji_2023_clasa_10_14_martie | Diferente pentru runda/concurs_pd intre reviziile 4 si 8 | Rezultatele filtrării | Borderou de evaluare (job #1078885) | Cod sursa (job #2081231)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
int n,l,u,st;
int a[1048577];
int dis=0;
queue <int> rep;
struct per
{
int prim,doi;
};
const int P=123457;
vector <per> h[P];
int adaug (int x)
{
int r=x%P;
int i;
int len=h[r].size();
for (i=0;i<len;i++)
{
if (h[r][i].prim==x)
{
h[r][i].doi++;
return 0;
}
}
per aux;
aux.prim=x;
aux.doi=1;
h[r].push_back(aux);
return 1;
}
int sterg(int x)
{
int r=x%P;
int len=h[r].size();
int i;
for (i=0;i<len;i++)
{
if (h[r][i].prim==x)
{
if (h[r][i].doi>=2)
{
h[r][i].doi--;
return 0;
}
else
{
h[r][i]=h[r][len-1];
h[r].pop_back();
return 1;
}
}
}
return 0;
}
int main()
{
ifstream in("secv5.in");
ofstream out("secv5.out");
in>>n>>l>>u;
int i;
int p=0;
int cs;
st=1;dis=0;
int aux;
for (i=1;i<=n;i++)
{
in>>a[i];
if (adaug(a[i])==1)
dis++;
while (dis>u)
{
if (sterg(a[st])==1)
{dis--;}
st++;
}
aux=dis;
cs=st;
while (aux>=l)
{
p++;
if (sterg(a[cs])==1)
{
aux--;
}
rep.push(a[cs]);
cs++;
}
while (!rep.empty())
{
adaug(rep.front());
rep.pop();
}
}
out<<p;
out.close();
in.close();
return 0;
}