Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- using ll = long long;
- using ld = long double;
- using ull = unsigned long long;
- using pii = pair<int, int>;
- using pll = pair<ll, ll>;
- using pld = pair<ld, ld>;
- #define fi first
- #define se second
- #define pb push_back
- #define pf push_front
- #define mp make_pair
- #define ins insert
- #define sz(x) (int)(x.size());
- #define all(x) x.begin(), x.end()
- #define debug(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
- mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
- int d4x[4] = {1, 0, -1, 0}; int d4y[4] = {0, 1, 0, -1};
- int d8x[8] = {0, 1, 1, 1, 0, -1, -1, -1};
- int d8y[8] = {1, 1, 0, -1, -1, -1, 0, 1};
- template<class X, class Y>
- bool minimize(X &x, const Y &y) {
- if (x > y)
- {
- x = y;
- return true;
- }
- return false;
- }
- template<class X, class Y>
- bool maximize(X &x, const Y &y) {
- if (x < y)
- {
- x = y;
- return true;
- }
- return false;
- }
- const int MOD = 1e9 + 7; //998244353
- template<class X, class Y>
- void add(X &x, const Y &y) {
- x = (x + y);
- if(x >= MOD) x -= MOD;
- }
- template<class X, class Y>
- void sub(X &x, const Y &y) {
- x = (x - y);
- if(x < 0) x += MOD;
- }
- /* Author : Le Ngoc Bao Anh, 11A5, LQD High School for Gifted Student*/
- const ll INF = 1e9;
- const int N = 1e6 + 10;
- pii a[N], b[N];
- ll prefA[N], prefB[N];
- vector<int> v;
- void solve() {
- int k; cin >> k;
- int n = 0, m = 0;
- v.pb(-INF);
- v.pb(INF);
- for(int i = 1; i <= k; i++) {
- char c;
- int x, y;
- cin >> c >> x >> y;
- if(c == 'A') a[++n] = mp(x, y);
- else b[++m] = mp(x, y);
- v.pb(x - 1);
- v.pb(x);
- v.pb(x + 1);
- }
- sort(all(v));
- v.resize(unique(all(v)) - v.begin());
- sort(a + 1, a + 1 + n);
- sort(b + 1, b + 1 + m);
- for(int i = 1; i <= n; i++) {
- a[i].fi = lower_bound(all(v), a[i].fi) - v.begin() + 1;
- prefA[i] = prefA[i - 1] + a[i].se;
- }
- for(int i = 1; i <= m; i++) {
- b[i].fi = lower_bound(all(v), b[i].fi) - v.begin() + 1;
- prefB[i] = prefB[i - 1] + b[i].se;
- }
- ll ans = -(INF * INF); int res = 0;
- for(int i = 1; i <= v.size(); i++) {
- if(v[i - 1] < -INF || v[i - 1] > INF) continue;
- int L = 1, R = n, posA = 0;
- while(L <= R) {
- int mid = (L + R) >> 1;
- if(a[mid].fi < i) {
- posA = mid;
- L = mid + 1;
- } else R = mid - 1;
- }
- L = 1, R = m; int posB = 0;
- while(L <= R) {
- int mid = (L + R) >> 1;
- if(b[mid].fi <= i) {
- posB = mid;
- L = mid + 1;
- } else R = mid - 1;
- }
- if(maximize(ans, 2 * prefA[posA] - prefA[n] + prefB[m] - 2 * prefB[posB])) res = i;
- }
- cout << v[res - 1] << " " << ans;
- }
- int main()
- {
- ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #else
- //online
- #endif
- int tc = 1, ddd = 0;
- // cin >> tc;
- while(tc--) {
- //ddd++;
- //cout << "Case #" << ddd << ": ";
- solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement