Pagini recente » Istoria paginii utilizator/al3ks1002 | Cod sursa (job #150168) | Profil Bugiros | Monitorul de evaluare | Cod sursa (job #712086)
Cod sursa(job #712086)
#include <fstream>
#include <vector>
#include <algorithm>
#include <string>
#define MOD 666013
#define DIM (1 << 20) + 1
using namespace std;
typedef unsigned long long LL;
ofstream fout("secv5.out");
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()
{
ifstream fin("secv5.in");
fin >> n >> L >> U;
LL x;
string s;
fin.get();
for (LL i = 1; i <= n; ++i)
{
//fin >> s;
getline(fin, s);
x = 0;
for (int j = 0; j < s.size(); ++j)
x = x * 10 + s[j] - '0';
b.push_back(make_pair(x, i));
}
fin.close();
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;
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;
}