Pagini recente » Cod sursa (job #2932095) | Cod sursa (job #919072) | Cod sursa (job #3257518) | Cod sursa (job #2132270) | Cod sursa (job #839506)
Cod sursa(job #839506)
#include <fstream>
#include <vector>
#include <cstdio>
#define NMAx (1<<20)+1
#define MOD 666013
using namespace std;
vector < pair<unsigned int,int> > Hash[MOD];
unsigned int V[NMAx];
int N,U,L,mark[NMAx];
int findHash(int X) {
for(int i=0;i<Hash[X%MOD].size();i++)
if(Hash[X%MOD][i].first==X)
return Hash[X%MOD][i].second;
return -1;
}
long long Query(int K) {
int i,j,Nr;
long long Sol;
memset(mark,0,sizeof(mark));
for(i=1,j=1,Nr=0,Sol=0;i<=N;i++) {
if(!mark[V[i]])
Nr++;
mark[V[i]]++;
while(Nr>K) {
if(mark[V[j]]==1)
Nr--;
--mark[V[j++]];
}
Sol+=i-j+1;
}
//for(;j<=N;--mark[V[j++]]);
return Sol;
}
void Write() {
ofstream out("secv5.out");
out<<(Query(U)-Query(L-1))<<'\n';
out.close();
}
void Read() {
int i,P,Nr;
ifstream in("secv5.in");
in>>N>>L>>U;
for(i=1,Nr=0;i<=N;i++) {
in>>V[i];
P=findHash(V[i]);
if(P==-1) {
Hash[V[i]%MOD].push_back(make_pair(V[i],++Nr));
V[i]=Nr;
}
else
V[i]=P;
}
in.close();
}
int main() {
Read();
Write();
return 0;
}