Submission #341708

#TimeUsernameProblemLanguageResultExecution timeMemory
341708IZhO_2021_I_want_SilverSchools (IZhO13_school)C++14
10 / 100
910 ms61972 KiB
#include <iostream> #include <algorithm> #include <vector> #include <cmath> #include <set> #include <map> #include <iomanip> #include <cassert> #include <stack> #include <queue> #include <deque> //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp>- using namespace std; //using namespace __gnu_pbds; typedef long long ll; #define int ll typedef pair <int, int> pii; typedef pair <ll, ll> pll; // template<typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; // order_of_key (k) : Number of items strictly smaller than k . // find_by_order(k) : K-th element in a set (counting from zero). #define sz(a) (int)a.size() #define all(a) a.begin(), a.end() #define pb push_back #define ppb pop_back #define mkp make_pair #define F first #define S second #define lb lower_bound #define ub upper_bound #define show(a) cerr << #a <<" -> "<< a <<" " #define nl cerr <<"\n" const int N = 3e5 + 5; const int oo = 1e9 + 5; int n, m, s, a[2][N], cur[2]; vector < pair <int, pii> > vec; multiset <pii> other[2], q[2]; bool used[N]; void add(int typ, int ind) { int val = a[typ][ind]; --cur[typ]; q[typ].insert({val, ind}); used[ind] = 1; other[typ].erase(other[typ].find({val, ind})); } void del(int typ, int ind) { int val = a[typ][ind]; ++cur[typ]; q[typ].erase(q[typ].find({val, ind})); used[ind] = 0; other[typ].insert({val, ind}); } void solve() { cin >> n >> m >> s; for (int i = 1; i <= n; ++i) { cin >> a[0][i] >> a[1][i]; vec.pb({a[0][i], {0, i}}); vec.pb({a[1][i], {1, i}}); other[0].insert({a[0][i], i}); other[1].insert({a[1][i], i}); } sort(all(vec)); cur[0] = m, cur[1] = s; int sum = 0; for (int i = sz(vec)-1; i >= 0; --i) { int val = vec[i].F, typ = vec[i].S.F, ind = vec[i].S.S; int before_sum = sum; bool del_q = 0; if (!cur[typ]) { //show(q[typ].begin() -> F); if (sz(q[typ])) { sum -= q[typ].begin() -> F; del_q = 1; } else { continue; } } bool del_ind = 0, got_other = 0; if (used[ind]) { //show(a[(typ^1)][ind]); sum -= a[(typ^1)][ind]; del_ind = 1; if (sz(other[(typ^1)])) { sum += other[(typ^1)].rbegin() -> F; got_other = 1; } } sum += val; //show(sum); if (sum > before_sum) { add(typ, ind); if (del_q) { del(typ, q[typ].begin() -> S); } if (del_ind) { del(typ^1, ind); } if (got_other) { add(typ^1, other[(typ^1)].rbegin() -> S); } } else { sum = before_sum; other[typ].erase(other[typ].find({val, ind})); } //nl; } cout << sum; } main () { ios_base::sync_with_stdio(false); cin.tie(NULL); int tests = 1; //cin >> tests; while (tests --) { solve(); } return 0; } /* Just Chalish! */

Compilation message (stderr)

school.cpp:108:8: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  108 |  main () {
      |        ^
#Verdict Execution timeMemoryGrader output
Fetching results...