Pagini recente » Monitorul de evaluare | Cod sursa (job #2268433) | Cod sursa (job #869812) | Cod sursa (job #567460) | Cod sursa (job #537074)
Cod sursa(job #537074)
#include<fstream>
#define DIM 1050003
#define K 1000000
#include<vector>
using namespace std;
vector<pair<unsigned,int> >G[DIM];
int cx[DIM],cy[DIM],L,U;
unsigned v[DIM];
long long sol,n;
void solve();
void normalizare();
ofstream fout("secv5.out");
int main()
{
ifstream fin("secv5.in");
fin>>n>>L>>U;
int i;
for(i=1;i<=n;i++)
fin>>v[i];
normalizare();
solve();
fout<<sol;
return 0;
}
void normalizare()
{
int i,j,k,bau=1;
for(i=1;i<=n;i++)
{
int pp=0;
k=v[i]%K;
for(j=0;j<G[k].size() && pp==0;j++)
if(G[k][j].first==v[i])
v[i]=G[k][j].second,pp=1;
if(!pp)
{
G[k].push_back(make_pair(v[i],bau));
v[i]=bau;
bau++;
}
}
}
void solve()
{
int nx=0, ny=0, x=1, y=1;
for(int i=1;i<=n;++i)
{
if (!cx[v[i]])
++nx;
++cx[v[i]];
while (nx>=L && x<=i)
{
--cx[v[x]];
if (!cx[v[x]])
--nx;
++x;
}
if (!cy[v[i]])
++ny;
++cy[v[i]];
while (ny>U && y<=i)
{
--cy[v[y]];
if (!cy[v[y]])
--ny;
++y;
}
if (nx==L-1 && ny<=U && ny>=L)
sol+=x-y;
}
}