Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <cmath>
- #include <map>
- #include <vector>
- #include <unordered_map>
- #include <numeric>
- #include <random>
- #include <set>
- //#define FAST_ALLOCATOR_MEMORY 1e8
- #include "optimization.h"
- using namespace std;
- struct S {
- long long sum;
- string city;
- S() {}
- S(long long _sum, string _city) : sum(_sum), city(_city) {}
- bool operator < (const S& s) const {
- if (sum == s.sum)
- return city < s.city;
- return sum > s.sum;
- }
- };
- signed main(void) {
- #ifdef LOCAL
- freopen("a.in", "r", stdin);
- freopen("a.out", "w", stdout);
- #endif
- ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
- int n = readInt();
- char* ss = (char*)malloc(50 * sizeof(char));
- string name, city;
- unordered_map<string, long long> cash(5 * n), sumCity(5 * n);
- unordered_map<string, string> cur(5 * n);
- map<string, int> ans;
- long long c;
- for (int i = 0; i < n; ++i) {
- readWord(ss);
- name = string(ss);
- readWord(ss);
- city = string(ss);
- c = readInt<long long>();
- cash[name] = c;
- cur[name] = city;
- sumCity[city] += c;
- }
- int days = readInt(), q = readInt();
- int curDay, lastDay = 0;
- set<S> s;
- for (auto it = sumCity.begin(); it != sumCity.end(); ++it) {
- s.insert({it->second, it->first});
- }
- for (int i = 0; i < q; ++i) {
- curDay = readInt();
- if (curDay != lastDay && ((int)s.size() == 1 || (*s.begin()).sum > (*(++s.begin())).sum)) {
- ans[(*s.begin()).city] += curDay - lastDay;
- }
- lastDay = curDay;
- readWord(ss);
- name = string(ss);
- readWord(ss);
- city = string(ss);
- s.erase({sumCity[cur[name]], cur[name]});
- sumCity[cur[name]] -= cash[name];
- s.insert({sumCity[cur[name]], cur[name]});
- s.erase({sumCity[city], city});
- sumCity[city] += cash[name];
- s.insert({sumCity[city], city});
- cur[name] = city;
- }
- if ((int)s.size() == 1 || (*s.begin()).sum > (*(++s.begin())).sum) {
- ans[(*s.begin()).city] += days - lastDay;
- }
- for (auto it = ans.begin(); it != ans.end(); ++it) {
- cout << it->first << ' ' << it->second << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement