Pagini recente » Cod sursa (job #1562058) | Cod sursa (job #424952) | Cod sursa (job #2028155) | Cod sursa (job #308265) | Cod sursa (job #2141288)
#include<fstream>
#include<vector>
#include<algorithm>
#include<string>
#define M 666013
#define DIM (1 << 20) + 1
using namespace std;
unsigned int n,l,u,norm,a[DIM],st,dr;
vector<vector<unsigned int> > G;
vector<pair<unsigned int, unsigned int> > b;
vector<short int> f;
ifstream in("secv5.in");
ofstream out("secv5.out");
unsigned long long secv(unsigned int dim) {
f.clear();
f.resize(norm+1, 0);
if (!dim) return 0;
unsigned long long sol=0, nr=0;
G.clear(); G.resize(M);
for(st = 1, dr = 1; dr <= n; ++dr) {
if(!f[a[dr]])
nr++;
f[a[dr]]++;
while(nr > dim) {
if (!(--f[a[st]]))
nr--;
st++;
}
sol += dr - st + 1;
}
return sol;
}
int main() {
unsigned int x,i,j;
char s[30];
in >> n >> l >> u;
in.get();
for(i = 1; i <= n; ++i) {
in.getline(s,30);
x = 0;
for(j = 0; s[j]!=0; ++j)
x = x * 10 + s[j] - '0';
b.push_back(make_pair(x, i));
}
sort(b.begin(), b.end());
for(i = 0; i < b.size(); ++i)
if (!i || b[i].first != b[i-1].first)
a[b[i].second] = ++norm;
else
a[b[i].second] = norm;
out << secv(u) - secv(l-1) << '\n';
return 0;
}