Pagini recente » Cod sursa (job #260897) | Cod sursa (job #2127165) | Cod sursa (job #1031807) | Cod sursa (job #1620761) | Cod sursa (job #1836041)
#include <cstdio>
#include <iostream>
#include <queue>
#include <vector>
#include <fstream>
#include <algorithm>
#include <string>
#include <iomanip>
#include <cstring>
#include <map>
#include <iomanip>
#include <unordered_map>
#include <stack>
#include <bitset>
#include <cctype>
#define MOD 666013
#define pb push_back
#define INF 0x3f3f3f3f
#define INFLL (1LL*INF*INF)
#define ll long long
#define NMAX 1100000
using namespace std;
typedef pair<int, int> pii;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
int v[NMAX],aparitii[NMAX];
vector<pii> Hash[NMAX];
int findHash(int x) {
int lista=x%MOD;
for(auto it:Hash[lista]) if(it.first==x) return it.second;
return 0;
}
void insertHash(int x, int nrord) {
int lista=x%MOD;
Hash[lista].pb({x,nrord});
}
ll atmost(int n, int limita) {
int i,st=1,diferite=0;
ll res=1LL*n*(n+1)/2;
for(i=1;i<=n;++i) {
if(aparitii[v[i]]==0) ++diferite;
++aparitii[v[i]];
while(diferite>limita) {
--aparitii[v[st]];
if(aparitii[v[st]]==0) --diferite;
++st;
}
res-=st-1;
}
memset(aparitii,0,sizeof(aparitii));
return res;
}
int main(){
int n,l,u,i,nrord=0,x,normalizat;
fin>>n>>l>>u;
for(i=1;i<=n;++i) {
fin>>x;
normalizat=findHash(x);
if(normalizat==0) {
++nrord;
insertHash(x,nrord);
v[i]=nrord;
}
else v[i]=normalizat;
}
fout<<atmost(n,u)-atmost(n,l-1);
return 0;
}