Pagini recente » Cod sursa (job #257331) | Cod sursa (job #581307) | Cod sursa (job #1889814) | Cod sursa (job #2279121) | Cod sursa (job #1181144)
#include <fstream>
#include <iostream>
#include <algorithm>
#include <vector>
#include <unordered_set>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
const int MAX_N=(1<<20)+100;
unsigned int v[MAX_N];
int d1[MAX_N];
int d2[MAX_N];
int n;
void get(int x,int d[MAX_N]) {
if(x==0) {
return;
}
int dist=0;
unordered_multiset<unsigned int> S;
for(int i=1; i<=n && dist<=x; i++) {
if(S.count(v[i])>0) {
S.insert(v[i]);
}
else {
if(dist==x) {
break;
}
else {
S.insert(v[i]);
dist++;
}
}
}
d[1]=S.size();
for(int i=2;i<=n;i++) {
S.erase(S.find(v[i-1]));
d[i]=d[i-1]-1;
if(S.count(v[i-1])==0) {
dist--;
while(i+d[i]<=n && dist<=x) {
if(S.count(v[i+d[i]])) {
S.insert(v[i+d[i]]);
}
else {
if(dist==x) {
break;
}
else {
S.insert(v[i+d[i]]);
dist++;
}
}
d[i]++;
}
}
}
}
int main() {
int a,b;
fin>>n>>a>>b;
for(int i=1;i<=n;i++) {
fin>>v[i];
}
get(a-1,d1);
get(b,d2);
long long ans=0;
for(int i=1; i<=n; i++) {
ans+=d2[i]-d1[i];
}
fout<<ans;
return 0;
}