比赛 收心赛 评测结果 TTTTTTTTTT
题目名称 冰火战士 最终得分 0
用户昵称 赵飞羽 运行时间 31.002 s
代码语言 C++ 内存使用 3.45 MiB
提交时间 2026-02-24 11:23:58
显示代码纯文本
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 2000010;
int Q, op, t, k, p[N], A, B, cnt = -1, ans = -1, c[N], d[N];
struct ice{
    int idx, x, y;
    bool friend operator <(ice u, ice v) {
        if (u.x == v.x) return u.y > v.y;
        return u.x < v.x;
    }
} a[N];

struct fire{
    int idx, x, y;
    bool friend operator <(fire u, fire v) {
        if (u.x == v.x) return u.y > v.y;
        return u.x > v.x;
    }
} b[N];

int _(int q) {
    for (int i = 1; i <= A; i++) c[i] = a[i].y;
    for (int i = 1; i <= B; i++) d[i] = b[i].y;
    int l = 1, r = 1, sum = 0;
    while (l <= A && r <= B) {
        if (q < c[l]) return sum;
        if (q > d[r]) return sum;
        sum += min(c[l], d[r]) * 2;
        if (c[l] > d[r]) c[l] -= d[r], r++;
        else if (c[l] < d[r]) d[r] -= c[l], l++;
        else {
            l++;
            r++;
        }
    }
    return sum;
}

signed main() {
    freopen("icefire.in", "r", stdin);
    freopen("icefire.out", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin >> Q;
	for (int i = 1; i <= Q; i++) {
	    cin >> op;
	    if (op == 1) {
	        cin >> t;
	        p[i] = t;
	        if (!t) {
	            cin >> a[i].x >> a[i].y;
	            a[i].idx = i;
	            A++;
	            sort(a+1, a+1+A);
            } else {
	            cin >> b[i].x >> b[i].y;
	            b[i].idx = i;
	            B++;
	            sort(b+1, b+1+B);
            }
        } else {
            cin >> k;
            if (!p[k]) {
                for (int j = 1; j <= A; i++) {
                    if (k == a[j].idx) {
                        a[j].x = 10000000000;
	                    sort(a+1, a+1+A);
                        A--;
                    }
                }
            } else {
                for (int j = 1; j <= B; i++) {
                    if (k == b[j].idx) {
                        b[j].x = 0;
	                    sort(b+1, b+1+B);
                        B--;
                    }
                }
            }
        }
        for (int j = 1; j <= A; j++) {
            if (_(a[j].x) >= cnt) {
                cnt = _(a[j].x);
                ans = max(ans, a[j].x);
            }
        }
        for (int j = 1; j <= B; j++) {
            if (_(b[j].x) >= cnt) {
                cnt = _(b[j].x);
                if (cnt > 0) ans = max(ans, b[j].x);
            }
        }
        if (ans == -1) cout << "Peace\n";
        else cout << ans << " " << cnt << "\n";
    }
	return 0;
}