Pagini recente » Cod sursa (job #440766) | Profil StarGold2 | Cod sursa (job #3246192) | Cod sursa (job #2102874) | Cod sursa (job #2834045)
#include <bits/stdc++.h>
using namespace std;
ifstream in("secv5.in");
ofstream out("secv5.out");
long long n,l,u,a[1100000],ans;
vector<pair<int,long long>>g[100005];
int aft[1100000];
bool blocl[1100000],blocu[1100000];
int main()
{
in >> n >> l >> u;
for (int i = 1; i <= n; i++)
{
in >> a[i];
g[a[i] % 100000].push_back(make_pair(a[i],i));
}
for (int i = 0; i < 100000; i++)
{
for (int j = 0; j < g[i].size(); j++)
{
int q;
for (q = j - 1; q >= 0; q--)
if (g[i][j].first == g[i][q].first)
break;
if (q != -1)
aft[g[i][q].second] = g[i][j].second;
}
}
for (int i = 0; i < 100000; i++)
g[i].clear();
int dl = 1,du = 1,eleml = 1,elemu = 1;
blocl[0] = blocu[0] = true;
blocl[aft[1]] = blocu[aft[1]] = true;
for (int i = 0; i <= n; i++)
if (aft[i] == 0)
aft[i] = n + 1;
for (int st = 1; st <= n; st++)
{
blocl[aft[st - 1]] = false;
blocu[aft[st - 1]] = false;
if (aft[st - 1] <= dl)
eleml++;
if (aft[st - 1] <= du)
elemu++;
if (blocl[st - 1] == false)
eleml--;
if (blocu[st - 1] == false)
elemu--;
while (dl < n and eleml < l)
{
dl++;
blocl[aft[dl]] = true;
if (blocl[dl] == false)
eleml++;
}
while (du <= n and elemu <= u)
{
du++;
if (du > n)
break;
else
{
blocu[aft[du]] = true;
if (blocu[du] == false)
elemu++;
}
}
if (eleml != l)
break;
else
{
ans += du - dl;
cout << dl << " " << du << '\n';
}
}
out << ans;
return 0;
}