Submission #1315727

#TimeUsernameProblemLanguageResultExecution timeMemory
1315727abcd123456Bulldozer (JOI17_bulldozer)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
using ld = long double;

const int MAXN = 2005;
const ld PI = acosl(-1.0L);
const ld EPS = 1e-12L;

int n;
ll X[MAXN], Y[MAXN], W[MAXN];

struct Node {
    ll sum, pre, suf, best;
    Node(ll v = 0) {
        sum = v;
        pre = suf = best = max(0LL, v);
    }
};

Node st[4 * MAXN];

Node mergeNode(const Node &L, const Node &R) {
    Node res;
    res.sum = L.sum + R.sum;
    res.pre = max(L.pre, L.sum + R.pre);
    res.suf = max(R.suf, R.sum + L.suf);
    res.best = max({L.best, R.best, L.suf + R.pre});
    return res;
}

void build(int id, int l, int r, const vector<ll> &arr) {
    if (l == r) {
        st[id] = Node(arr[l]);
        return;
    }
    int mid = (l + r) >> 1;
    build(id<<1, l, mid, arr);
    build(id<<1|1, mid+1, r, arr);
    st[id] = mergeNode(st[id<<1], st[id<<1|1]);
}

void update(int id, int l, int r, int pos, ll val) {
    if (l == r) {
        st[id] = Node(val);
        return;
    }
    int mid = (l + r) >> 1;
    if (pos <= mid) update(id<<1, l, mid, pos, val);
    else update(id<<1|1, mid+1, r, pos, val);
    st[id] = mergeNode(st[id<<1], st[id<<1|1]);
}

struct Event {
    ld ang;
    int u, v;
    bool operator<(const Event &o) const {
        if (fabsl(ang - o.ang) > EPS) return ang < o.ang;
        if (u != o.u) return u < o.u;
        return v < o.v;
    }
};

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n;
    for (int i = 1; i <= n; ++i)
        cin >> X[i] >> Y[i] >> W[i];

    vector<Event> ev;
    for (int i = 1; i <= n; ++i)
        for (int j = i + 1; j <= n; ++j) {
            ld ang = atan2l((ld)(Y[j] - Y[i]), (ld)(X[j] - X[i]));
            if (ang < 0) ang += PI;
            ev.push_back({ang, i, j});
        }

    sort(ev.begin(), ev.end());

    vector<int> ord(n + 1), pos(n + 1);
    iota(ord.begin(), ord.end(), 0);

    sort(ord.begin() + 1, ord.end(), [&](int a, int b) {
        if (X[a] != X[b]) return X[a] < X[b];
        return Y[a] < Y[b];
    });

    for (int i = 1; i <= n; ++i)
        pos[ord[i]] = i;

    vector<ll> arr(n + 1);
    for (int i = 1; i <= n; ++i)
        arr[i] = W[ord[i]];

    build(1, 1, n, arr);

    ll ans = st[1].best;

    for (size_t i = 0; i < ev.size(); ) {
        size_t j = i;
        while (j < ev.size() && fabsl(ev[j].ang - ev[i].ang) <= EPS) ++j;

        vector<pair<int,int>> sw;
        for (size_t k = i; k < j; ++k) {
            int u = ev[k].u, v = ev[k].v;
            int pu = pos[u], pv = pos[v];
            if (pu == pv) continue;
            if (pu > pv) swap(pu, pv);
            sw.emplace_back(pu, pv);
        }

        sort(sw.begin(), sw.end());
        sw.erase(unique(sw.begin

Compilation message (stderr)

bulldozer.cpp: In function 'int main()':
bulldozer.cpp:116:33: error: expected ')' at end of input
  116 |         sw.erase(unique(sw.begin
      |                        ~        ^
      |                                 )
bulldozer.cpp:116:33: error: expected '}' at end of input
bulldozer.cpp:102:41: note: to match this '{'
  102 |     for (size_t i = 0; i < ev.size(); ) {
      |                                         ^
bulldozer.cpp:116:33: error: expected '}' at end of input
  116 |         sw.erase(unique(sw.begin
      |                                 ^
bulldozer.cpp:65:12: note: to match this '{'
   65 | int main() {
      |            ^