Pagini recente » Cod sursa (job #238879) | Cod sursa (job #3233205) | Cod sursa (job #383710) | Cod sursa (job #3348096) | Cod sursa (job #3319294)
//https://www.nerdarena.ro/problema/secv5
#include <bits/stdc++.h>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
constexpr int NRMAX = 1 << 21;
constexpr int MOD = 666013;
int n;
int64_t v[NRMAX + 5];
vector<pair<int64_t, int>> h[2][MOD];
bool adg(int64_t x, vector<pair<int64_t, int>> (&h) [MOD])
{
int nr = x % MOD;
for (auto& it : h[nr])
{
if (it.first == x)
{
++it.second;
return false;
}
}
h[nr].push_back(make_pair(x, 1));
return true;
}
bool scad(int64_t x, vector<pair<int64_t, int>> (&h) [MOD])
{
int nr = x % MOD;
for (auto it = h[nr].begin(); it != h[nr].end(); ++it)
{
if (it->first == x)
{
--it->second;
if(it->second == 0)
{
h[nr].erase(it);
return true;
}
return false;
}
}
return false;
}
int64_t rezolvare(int lun, int hpoz)
{
int i = 1, k = 0, j;
int64_t rez = 0;
auto &H = h[hpoz];
for (j = 1; j <= n; j++)
{
if (adg(v[j], H) == true)
{
//cout<<i<<" "<<j<<"\n";
++k;
while (k > lun)
{
if(scad(v[i], h[hpoz]) == true)
--k;
++i;
}
}
rez += (j - i);
}
//cout<<rez<<" ";
return rez;
}
int main()
{
int l, u, i;
fin >> n >> l >> u;
for (i = 1; i <= n; i++)
{
fin >> v[i];
}
fout << rezolvare(u, 0) - rezolvare(l - 1, 1);
return 0;
}