Pagini recente » Cod sursa (job #2548486) | Cod sursa (job #415561) | Cod sursa (job #637757) | Cod sursa (job #409154) | Cod sursa (job #1047928)
#include<iostream>
#include<cstdio>
#include<vector>
#define MOD 666031;
using namespace std;
vector<pair<int, int> >h[666032];
int v[1048577], n;
long long number(int u)
{
int nr=0, i, st, dr, zona, j, x, ok;
long long numar=0;
for(i=0; i<=666031; i++)
h[i].clear();
st=1; dr=0;
for(i=1; i<=n; i++)
{
dr++;
x=v[i];
zona=x%MOD;
ok=0;
for(j=0; j<h[zona].size(); j++)
if(h[zona][j].first==v[i])
{ok=1;h[zona][j].second++;}
if(ok==0)
{
h[zona].push_back(make_pair(v[i], 1));
nr++;
}
if(nr<=u)
numar+=(dr-st+1);
else
{
while(nr>u)
{st++;
zona=v[st-1]%MOD;
for(vector<pair<int, int> >::iterator it=h[zona].begin(); it!=h[zona].end(); it++)
{if((*it).first==v[st-1])
{if((*it).second==1)
{
nr--;
h[zona].erase(it);
break;
}
else
(*it).second--;
}
}
}
numar+=(dr-st+1);
}
}
return numar;
}
int main()
{
FILE *fin, *fout;
fin=fopen("secv5.in","r");
fout=fopen("secv5.out", "w");
int i, l, c, a, b;
fscanf(fin, "%d %d %d",&n, &l, &c);
for(i=1; i<=n; i++)
fscanf(fin, "%d", &v[i]);
fprintf(fout, "%lld", number(c)-number(l-1));
}