Pagini recente » Cod sursa (job #3176755) | Cod sursa (job #506530) | Cod sursa (job #844003) | Cod sursa (job #1270160) | Cod sursa (job #1047952)
#include<iostream>
#include<cstdio>
#include<vector>
#define MOD 666013;
using namespace std;
vector<pair<unsigned int, int> >h[666014];
unsigned int v[1048060];
int n;
long long number(int u)
{
int nr=0, i, st, dr, zona, j, ok;
unsigned int x;
long long numar=0;
for(i=0; i<=666013; 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<unsigned 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, "%ud", &v[i]);
fprintf(fout, "%lld", number(c)-number(l-1));
}