Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #include <ext/pb_ds/assoc_container.hpp>
- #include <ext/pb_ds/tree_policy.hpp>
- #include <ext/rope>
- #include <numeric>
- using namespace __gnu_cxx;
- using namespace std;
- using namespace __gnu_pbds;
- #define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
- #define multi_ordered_set tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update>
- #define ll long long
- // #define tolower(s) transform(s.begin(), s.end(), s.begin(), ::tolower)
- #define midpoint(l, r) l + (r - 1) / 2
- #define cy cout << "YES"
- #define cn cout << "NO"
- #define PI 3.142857
- #define NumOfDig(w) log10(w) + 1
- #define sz(x) int(x.size())
- #define fixed(n) fixed << setprecision(n)
- #define cin_vec(i, n) for (int i = 0, entry; i < n && cin >> entry; i++)
- #define M 1e18
- #define cin(v) \
- for (auto &i : v) \
- cin >> i;
- #define cout(v) \
- for (auto &i : v) \
- cout << i << " ";
- #define remove_Dublicates(v) v.erase(unique(v.begin(), v.end()), v.end());
- #define area_of_triangle sqrt((sum / 2) * (sum / 2 - arr[0]) * (sum / 2 - arr[1]) * (sum / 2 - arr[2]))
- #define ed "\n"
- #define OO 2'000'000'000
- #define MOD 1'000'000'007
- #define all(s) s.begin(), s.end()
- #define rall(s) s.rbegin(), s.rend()
- #define pb push_back
- const ll mod = 999983;
- #define prefix(v) partial_sum(all(v), v.begin());
- using namespace std;
- template <typename T = int>
- istream &operator>>(istream &in, vector<T> &v)
- {
- for (auto &x : v)
- in >> x;
- return in;
- }
- template <typename T = int>
- ostream &operator<<(ostream &out, const vector<T> &v)
- {
- for (const T &x : v)
- out << x << " ";
- return out;
- }
- template <typename T>
- bool is_equal(std::vector<T> const &v)
- {
- if (v.size() == 0)
- {
- return false;
- }
- for (int i = 1; i < v.size(); i++)
- {
- if (v[0] != v[i])
- {
- return false;
- }
- }
- return true;
- }
- /*
- ███████╗░█████╗░████████╗░█████╗░░█████╗░███╗░░░███╗
- ╚════██║██╔══██╗╚══██╔══╝██╔══██╗██╔══██╗████╗░████║
- ░░░░██╔╝███████║░░░██║░░░██║░░██║██║░░██║██╔████╔██║
- ░░░██╔╝░██╔══██║░░░██║░░░██║░░██║██║░░██║██║╚██╔╝██║
- ░░██╔╝░░██║░░██║░░░██║░░░╚█████╔╝╚█████╔╝██║░╚═╝░██║
- ░░╚═╝░░░╚═╝░░╚═╝░░░╚═╝░░░░╚════╝░░╚════╝░╚═╝░░░░░╚═╝
- */
- void hatoom()
- {
- ios_base ::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
- #endif
- }
- struct player
- {
- int id;
- int points;
- bool operator<(const player &other) const
- {
- if (points == other.points)
- {
- return id < other.id;
- }
- return points > other.points;
- }
- };
- void solve()
- {
- ll n, c;
- cin >> n >> c;
- multiset<player> s;
- for (int i = 1; i <= n; i++)
- {
- s.insert({i, 0});
- }
- int p1 = 0, p2 = 0;
- for (int i = 0; i < c; i++)
- {
- int player1, player2, points1, points2;
- cin >> player1 >> player2 >> points1 >> points2;
- auto it1 = s.find({player1, p1});
- p1 = it1->points + points1;
- s.erase(it1);
- s.insert({player1, p1});
- auto it2 = s.find({player2, p2});
- p2 = it2->points + points2;
- s.erase(it2);
- s.insert({player2, p2});
- int cnt = 0;
- for (auto it = s.begin(); it != s.end(); it++)
- {
- if (cnt == 2)
- break;
- cout << it->id << " ";
- cnt++;
- }
- cout << ed;
- }
- }
- int main()
- {
- hatoom();
- ios_base ::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
- // freopen("input.txt", "r", stdin);
- // freopen("output.txt" ,"w",stdout);
- ll t = 1;
- // cin >> t;
- while (t--)
- {
- solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement