Pagini recente » Cod sursa (job #803628) | Cod sursa (job #1304709) | Cod sursa (job #396470) | Cod sursa (job #671471) | Cod sursa (job #3333523)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int NMAX=(1<<20)+1;
ifstream f("secv5.in");
ofstream g("secv5.out");
int n,w[NMAX],ap[NMAX],u,l;
struct elem {
unsigned int val;
int poz;
};
elem v[NMAX];
bool comp(const elem& x,const elem& y) {
if(x.val==y.val) {
return x.poz<y.poz;
}
return x.val<y.val;
}
void normal() {
sort(v+1,v+n+1,comp);
int x=1;
w[v[1].poz]=1;
for(int i=2; i<=n; i++) {
if(v[i].val!=v[i-1].val) {
++x;
}
w[v[i].poz]=x;
}
}
long long ra(int x) {
long long sec=0;
int cate=0,st=1;
for(int i=1; i<=n; i++) {
ap[i]=0;
}
for(int i=1; i<=n; i++) {
if(++ap[w[i]]==1) {
++sec;
}
while(sec>x&&st<=i) {
if(--ap[w[st]]==0) {
--sec;
}
++st;
}
cate+=i-st+1;
}
return cate;
}
int main() {
f>>n>>l>>u;
for(int i=1; i<=n; i++) {
f>>v[i].val;
v[i].poz=i;
}
normal();
g<<ra(u)-ra(l-1);
f.close();
g.close();
return 0;
}