Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iomanip>
- #include <iostream>
- #include <set>
- #include <unordered_set>
- #include <vector>
- using namespace std;
- int main() {
- long long int n, m, q;
- cin >> n >> m >> q;
- vector<unordered_set<long long int>> data_and_servers(n);
- set<pair<long long int, long long int>> vals;
- vector<int> data(n, 0);
- for (long long i = 0; i < n; ++i) {
- vals.insert({0, i});
- }
- for(int i = 1; i <= q; ++i) {
- string s;
- cin >> s;
- if(s == "RESET") {
- int x;
- cin >> x;
- vals.erase({data[x - 1] * (m - data_and_servers[x - 1].size()), x - 1});
- data[x - 1]++;
- data_and_servers[x - 1].clear();
- vals.insert({data[x - 1] * m, x - 1});
- }
- else if(s == "DISABLE") {
- int x1, x2;
- cin >> x1 >> x2;
- if (!data_and_servers[x1 - 1].contains(x2)) {
- vals.erase({data[x1 - 1] * (m - data_and_servers[x1 - 1].size()), x1 - 1});
- data_and_servers[x1 - 1].insert(x2);
- vals.insert({data[x1 - 1] * (m - data_and_servers[x1 - 1].size()), x1 - 1});
- }
- }
- else if(s == "GETMAX") {
- auto it = vals.end();
- --it;
- if (it != vals.begin()) {
- auto t_it = it;
- --t_it;
- if (t_it->first == it->first) {
- it = vals.lower_bound({it->first, 0});
- }
- }
- cout << it->second + 1 << endl;
- }
- else if (s == "GETMIN") {
- cout << (vals.begin())->second + 1 << endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement