Pagini recente » Cod sursa (job #1890017) | Cod sursa (job #2876340) | Cod sursa (job #1202632) | Cod sursa (job #1470436) | Cod sursa (job #712089)
Cod sursa(job #712089)
#include <fstream>
#include <vector>
#include <cstdio>
#include <algorithm>
#include <string>
#define MOD 666013
#define DIM (1 << 20) + 1
using namespace std;
typedef unsigned long long LL;
LL n, L, U, norm;
vector<vector<LL> > G;
vector<pair<LL, LL> > b;
LL a[DIM];
vector<short int> f;
LL Secv(LL);
int main()
{
freopen("secv5.in", "r", stdin);
scanf("%Ld %Ld %Ld", &n, &L, &U);
LL x;
for (LL i = 1; i <= n; ++i)
{
scanf("%Ld", &x);
b.push_back(make_pair(x, i));
}
fclose(stdin);
sort(b.begin(), b.end());
for (LL 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;
ofstream fout("secv5.out");
fout << Secv(U) - Secv(L-1) << '\n';
fout.close();
return 0;
}
LL Secv(LL dim)
{
f.clear();
f.resize(norm+1, 0);
if (!dim) return 0;
LL sol(0), nr(0);
G.clear(); G.resize(MOD);
for (LL st = 1, dr = 1; dr <= n; ++dr)
{
if (!f[a[dr]]) nr++;
f[a[dr]]++;
while (nr > dim)
{
f[a[st]]--;
if (!f[a[st]])
nr--;
st++;
}
sol += dr - st + 1;
}
return sol;
}