Pagini recente » Rating Pirneci David-Andrei (David399) | Pawns | Sedinta 2008-10-22 | Profil maritim | Cod sursa (job #1574472)
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstdio>
#include<fstream>
#include<unordered_map>
using namespace std;
const unsigned int N = 1000100;
const unsigned int MOD = 106013;
unsigned int n, l, u, no, norm[N], x[N];
char s[30];
unordered_map<unsigned int, int> H;
long long secv(int m) {
H.clear();
long long sol = 0;
int lg = 0, dist = 0, pos = 1;
for (int i = 1; i <= n; ++i) {
if (H[x[i]]) {
++H[x[i]];
++lg;
sol += 1LL * lg;
}
else {
++H[x[i]];
++dist;
++lg;
if (dist > m) {
while (dist > m) {
--H[x[pos]];
if (!H[x[pos]]) {
--dist;
H.erase(x[pos]);
}
--lg;
++pos;
}
}
sol += 1LL * lg;
}
}
return sol;
}
bool cmp(unsigned int a, unsigned int b) {
return x[a] < x[b];
}
ifstream in("secv5.in");
ofstream out("secv5.out");
int main() {
unsigned int i;
in >> n >> l >> u;
in.get();
for(i = 1; i <= n; ++i) {
in.getline(s, 1000);
unsigned int pp = 0, r = 0;
while(s[pp] >= '0' && s[pp] <= '9')
r = r * 10 + s[pp++] - '0';
x[i] = r;
}
out << secv(u) - secv(l-1) << '\n';
return 0;
}