QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#882816#9683. 士兵nie_zyCompile Error//C++143.0kb2025-02-05 11:38:292025-02-05 11:38:30

Judging History

This is the latest submission verdict.

  • [2025-02-05 11:38:30]
  • Judged
  • [2025-02-05 11:38:29]
  • Submitted

answer

#include <bits/stdc++.h>
#define pl p << 1
#define pr p << 1 | 1
#define mid (l + r >> 1)
using namespace std;
typedef long long ll;

const int MAXN = 5e5 + 5;
int n, m, a[MAXN], b[MAXN], lsh[MAXN], lsh_cnt;

struct seg {
    const ll INF 1e18;
    int B;
    struct node {
        ll mx1, mx2, add;
    } t[MAXN << 2];
    
    void build(int p, int l, int r) {
        if (l == r) {
            t[p] = {l ? -(ll)lsh[l] * m : 0, 0, 0};
            return;
        }
        build(pl, l, mid), build(pr, mid + 1, r);
        t[p] = {max(t[pl].mx1, t[pr].mx1), 0, 0};
        return;
    }
    
    void init() {
        B = lsh_cnt;
        build(1, 0, B);
        return;
    }
    
    void _spd(int p, ll k) {
        t[p].mx1 += k, t[p].mx2 += k, t[p].add += k;
        return;
    }
    
    void spd(int p) {
        _spd(pl, t[p].add);
        _spd(pr, t[p].add);
        t[p].add = 0;
        return;
    }
    
    ll ask1(int p, int l, int r, int L, int R) {
        if (R < l || L > r) return -INF;
        if (L <= l && r <= R) return t[p].mx1;
        spd(p);
        return max(ask1(pl, l, mid, L, R), ask1(pr, mid + 1, r, L, R));
    }
    
    ll ask2(int p, int l, int r, int L, int R) {
        if (R < l || L > r) return -INF;
        if (L <= l && r <= R) return t[p].mx2;
        spd(p);
        return max(ask2(pl, l, mid, L, R), ask2(pr, mid + 1, r, L, R));
    }
    
    void add(int p, int l, int r, int L, int R, int k) {
        if (R < l || L > r) return;
        if (L <= l && r <= R) {
            _spd(p, k);
            return;
        }
        spd(p);
        add(pl, l, mid, L, R, k), add(pr, mid + 1, r, L, R, k);
        t[p].mx1 = max(t[pl].mx1, t[pr].mx1);
        t[p].mx2 = max(t[pl].mx2, t[pr].mx2);
        return;
    }
    
    void chg(int p, int l, int r, int x, ll k) {
        if (l == r) {
            t[p].mx1 = max(t[p].mx1, k);
            t[p].mx2 = t[p].mx1 + (ll)lsh[x] * m;
            return;
        }
        spd(p);
        x <= mid ? chg(pl, l, mid, x, k) : chg(pr, mid + 1, r, x, k);
        t[p].mx1 = max(t[pl].mx1, t[pr].mx1);
        t[p].mx2 = max(t[pl].mx2, t[pr].mx2);
        return;
    }
} T;

ll ans;

void dp() {
    T.init();
    for (int i = 1; i <= n; i++) {
        int j = lower_bound(lsh + 1, lsh + lsh_cnt + 1, a[i]) - lsh;
        if (b[i] < 0) {
            ll mx = T.ask1(1, 0, T.B, j, lsh_cnt);
            T.chg(1, 0, T.B, j - 1, mx);
        }
        else {
            ll mx = T.ask2(1, 0, T.B, 0, j - 1);
            T.chg(1, 0, T.B, j, mx - (ll)a[i] * m);
        }
        T.add(1, 0, T.B, j, lsh_cnt, b[i]);
    }
    ans = T.t[1].mx1;
    return;
}

int main() {
	ios::sync_with_stdio(0), cin.tie(0);
	int T; cin >> T;
	while (T--) {
	    cin >> n >> m;
	    for (int i = 1; i <= n; i++) {
	        cin >> a[i] >> b[i];
	        lsh[i] = a[i];
	    }
	    sort(lsh + 1, lsh + n + 1);
	    lsh_cnt = unique(lsh + 1, lsh + n + 1) - lsh - 1;
	    dp();
	    cout << ans << "\n";
	}
	return 0;
}

详细

answer.code:12:14: error: expected ‘;’ at end of member declaration
   12 |     const ll INF 1e18;
      |              ^~~
      |                 ;
answer.code:12:18: error: expected unqualified-id before numeric constant
   12 |     const ll INF 1e18;
      |                  ^~~~
answer.code:85:3: error: use of deleted function ‘seg::seg()’
   85 | } T;
      |   ^
answer.code:11:8: note: ‘seg::seg()’ is implicitly deleted because the default definition would be ill-formed:
   11 | struct seg {
      |        ^~~
answer.code:11:8: error: uninitialized const member in ‘struct seg’
answer.code:12:14: note: ‘const ll seg::INF’ should be initialized
   12 |     const ll INF 1e18;
      |              ^~~
answer.code:85:3: note: use ‘-fdiagnostics-all-candidates’ to display considered candidates
   85 | } T;
      |   ^