Pagini recente » Cod sursa (job #1561506) | Cod sursa (job #951557) | Cod sursa (job #1352986) | Cod sursa (job #738072) | Cod sursa (job #2490268)
#include <fstream>
#include<iostream>
#define mod 666013
#include<deque>
FILE*f;
FILE*g;
using namespace std;
int n,l,u,i,j,k,asd,alf,v[100000],rasp,ador;
deque<pair<int,int> >deque1[10000];
bool adaugare(int x)
{
int index=x%mod;int alf=0;
for(int i=1;i<=deque1[index].size();i++)
{
if(deque1[index].front().first==x)
{deque1[index].front().second++;alf++;break;}
deque1[index].push_back(deque1[index].front());
deque1[index].pop_front();
}
if(alf==0)
deque1[index].push_front(make_pair(x,1));
return alf;
}
void stergere(int x)
{alf=0;
int index=x%mod;
deque<pair<int,int> >::iterator i2;
for(i2=deque1[index].begin();i2!=deque1[index].end();++i2)
{
if(x==i2->first)
{
if(i2->second==1)
{alf=1;deque1[index].erase(i2);}
else
deque1[index].front().second--;
break;
}
}
}
bool verificare(int x)
{int adev=0;
int index=x%mod;
//int rata=deque1[index].front().first;
deque<pair<int,int> >::iterator i;
for(i=deque1[index].begin();i<=deque1[index].end();++i)
{
if(i->first==x)
{
adev=1;break;
}
}
if(adev)
return 1;
}
int raspuns(int u)
{
int i=1;
int j=1;
int dif=1;
int rasp=1;
deque1[v[1]%mod].push_front(make_pair(v[1],1));
while(j<n)
{int toate=0;
if(j!=n&&verificare(v[j+1]))
toate=1;
if(dif<u||toate)
{j++;
if(!adaugare(v[j]))
dif++;
rasp+=j-i+1;
}
else
if(j!=n)
{
stergere(v[i]);
if(alf==1)
dif--;
i++;
}
}
return rasp;
}
int main()
{f=fopen("secv5.in","r");
g=fopen("secv5.out","w");
fscanf(f,"%d%d%d",&n,&l,&u);
for(int i=1;i<=n;i++)
fscanf(f,"%d",&v[i]);
int alpha=deque1[7].front().first;
int asas=raspuns(u);
for(int i=1;i<=n;i++)
{
while(!deque1[v[i]%mod].empty())
deque1[v[i]%mod].pop_front();
}
//int alpha=deque1[7].front().first;
int asas1=raspuns(l-1);
fprintf(g,"%d",asas-asas1);
return 0;
}