Pagini recente » Cod sursa (job #157958) | Cod sursa (job #2436032) | Cod sursa (job #118147) | Cod sursa (job #2842616) | Cod sursa (job #858178)
Cod sursa(job #858178)
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N = 1000100;
const int MOD = 666013;
int n, l, u, no, norm[N], x[N];
char s[30];
vector<pair<int, int> > h[MOD];
inline bool find(int el) {
int poz = el % MOD;
for(vector<pair<int, int> >::iterator it = h[poz].begin(); it != h[poz].end(); ++it)
if(it->first == el && it->second)
return true;
return false;
}
inline void add(int nr, int val) {
int poz = nr % MOD;
for(vector<pair<int, int> >::iterator it = h[poz].begin(); it != h[poz].end(); ++it)
if(it->first == nr) {
it->second += val;
return;
}
h[poz].push_back(make_pair<int, int>(nr, val));
}
long long secv(int dim) {
int i, st, dr;
if(!dim)
return 0;
long long sol = 0;
int nu = 0;
for(i = 0; i < MOD; ++i)
h[i].clear();
for(st = 1, dr = 1; dr <= n; ++dr) {
if(!find(x[dr]))
nu++;
add(x[dr], 1);
while(nu > dim) {
add(x[st], -1);
if(!find(x[st]))
nu--;
st++;
}
sol += dr - st + 1;
}
return sol;
}
bool cmp(int a, int b) {
return x[a] < x[b];
}
int main() {
int i;
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
cin >> n >> l >> u;
cin.get();
for(i = 1; i <= n; ++i) {
gets(s);
int pp = 0, r = 0;
while(s[pp] >= '0' && s[pp] <= '9')
r = r * 10 + s[pp++] - '0';
x[i] = r;
}
cout << secv(u) - secv(l-1) << '\n';
return 0;
}