제출 #1196055

#제출 시각아이디문제언어결과실행 시간메모리
1196055raphaelpA Light Inconvenience (CEOI23_light)C++20
0 / 100
0 ms408 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...