Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1176802) | Cod sursa (job #1610063) | Cod sursa (job #1569481)
#include <fstream>
#include <cstring>
#include <unordered_map>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
char sir[101];
int N, L, U;
unsigned int V[1100000];
unordered_map<unsigned int, int> H;
long long max_secv(int M)
{
H.clear();
long long sol = 0;
int lg = 0, dist = 0, pos = 1;
for (int i = 1; i <= N; ++i)
{
if (H[V[i]])
{
++H[V[i]];
++lg;
sol += 1LL * lg;
}
else
{
++H[V[i]];
++dist;
++lg;
if (dist > M)
{
while (dist > M)
{
--H[V[pos]];
if (!H[V[pos]])
{
--dist;
H.erase(V[pos]);
}
--lg;
++pos;
}
}
sol += 1LL * lg;
}
}
return sol;
}
void parsare()
{
fin.getline(sir + 1, 101);
int lg = strlen(sir + 1), pos = 1;
while (sir[pos] != ' ')
{
N = N * 10 + int(sir[pos] - '0');
++pos;
}
++pos;
while (sir[pos] != ' ')
{
L = L * 10 + int(sir[pos] - '0');
++pos;
}
++pos;
while (pos <= lg)
{
U = U * 10 + int(sir[pos] - '0');
++pos;
}
}
int main()
{
parsare();
for (int i = 1; i <= N; ++i)
{
fin.getline(sir + 1, 101);
int lg = strlen(sir + 1);
for (int j = 1; j <= lg; ++j)
V[i] = V[i] * 10 + int(sir[j] - '0');
}
fout << max_secv(U) - max_secv(L - 1) << '\n';
return 0;
}