#include <bits/stdc++.h>
#include "light.h"
using namespace std;
#define LSOne(S) ((S) & (-S))
void prepare() {}
long long tot = 0;
vector<pair<long long, long long>> Runners;
vector<long long> something;
pair<long long, vector<long long>> join(long long x)
{
pair<long long, vector<long long>> ans;
ans.first = x;
tot += x;
for (long long i = 0; i < Runners.size(); i++)
Runners[i].second = min(Runners[i].second + x, Runners[i].first + LSOne(Runners[i].first) - 1);
long long buff = Runners.size() - 1;
long long temp = tot;
for (long long j = 1; j < tot; j *= 2)
ans.second.push_back(j);
ans.second.push_back(0);
ans.second.push_back(tot);
for (long long i = 0; i < something.size(); i++)
if (something[i] + 2 * LSOne(something[i]) > tot && something[i] < tot)
ans.second.push_back(something[i]);
while (temp != LSOne(temp))
{
while (buff >= 0 && Runners[buff].first > temp - (2 * LSOne(temp)))
buff--;
if (buff == -1 || Runners[buff].first != temp - (2 * LSOne(temp)))
{
Runners.push_back({temp - 2 * LSOne(temp), temp - 2 * LSOne(temp) + temp - tot});
buff++;
swap(Runners.back(), Runners[buff]);
}
long long temp2 = Runners[buff].first;
for (long long j = LSOne(temp2) / 2; j; j /= 2)
{
ans.second.push_back(temp2);
temp2 += j;
if (Runners[buff].second < temp2)
break;
}
ans.second.push_back(Runners[buff].second);
temp += LSOne(temp);
}
if (LSOne(tot) == tot)
{
for (long long j = tot - LSOne(tot) / 2; j < tot; j += (LSOne(j) + 1) / 2)
ans.second.push_back(j);
}
else
ans.second.push_back(tot - LSOne(tot));
vector<pair<long long, long long>> Run;
for (long long i = 0; i < Runners.size(); i++)
if (Runners[i].first + 2 * LSOne(Runners[i].first) >= tot)
Run.push_back(Runners[i]);
sort(Run.begin(), Run.end());
swap(Run, Runners);
sort(ans.second.begin(), ans.second.end());
vector<long long> ans2;
for (long long i = 0; i < ans.second.size(); i++)
{
if (i == 0 || ans.second[i] != ans.second[i - 1])
ans2.push_back(ans.second[i]);
}
something = ans2;
for (long long i = 0; i < ans2.size(); i++)
ans2[i]++;
swap(ans.second, ans2);
return ans;
}
pair<long long, vector<long long>> leave(long long x)
{
pair<long long, vector<long long>> ans;
ans.first = x;
tot -= x;
for (long long i = 0; i < Runners.size(); i++)
Runners[i].second = min(Runners[i].second + x, Runners[i].first + LSOne(Runners[i].first) - 1);
long long buff = Runners.size() - 1;
long long temp = tot;
for (long long j = 1; j < tot; j *= 2)
ans.second.push_back(j);
ans.second.push_back(0);
ans.second.push_back(tot);
for (long long i = 0; i < something.size(); i++)
if (something[i] + 2 * LSOne(something[i]) > tot && something[i] < tot)
ans.second.push_back(something[i]);
while (temp != LSOne(temp))
{
while (buff >= 0 && Runners[buff].first > temp - (2 * LSOne(temp)))
buff--;
if (buff == -1 || Runners[buff].first != temp - (2 * LSOne(temp)))
{
Runners.push_back({temp - 2 * LSOne(temp), temp - 2 * LSOne(temp) + temp - tot});
buff++;
swap(Runners.back(), Runners[buff]);
}
long long temp2 = Runners[buff].first;
for (long long j = LSOne(temp2) / 2; j; j /= 2)
{
ans.second.push_back(temp2);
temp2 += j;
if (Runners[buff].second < temp2)
break;
}
ans.second.push_back(Runners[buff].second);
temp += LSOne(temp);
}
if (LSOne(tot) == tot)
{
for (long long j = tot - LSOne(tot) / 2; j < tot; j += (LSOne(j) + 1) / 2)
ans.second.push_back(j);
}
else
ans.second.push_back(tot - LSOne(tot));
vector<pair<long long, long long>> Run;
for (long long i = 0; i < Runners.size(); i++)
if (Runners[i].first + 2 * LSOne(Runners[i].first) >= tot)
Run.push_back(Runners[i]);
sort(Run.begin(), Run.end());
swap(Run, Runners);
sort(ans.second.begin(), ans.second.end());
vector<long long> ans2;
for (long long i = 0; i < ans.second.size(); i++)
{
if (i == 0 || ans.second[i] != ans.second[i - 1])
ans2.push_back(ans.second[i]);
}
something = ans2;
for (long long i = 0; i < ans2.size(); i++)
ans2[i]++;
swap(ans.second, ans2);
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |