QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#638790#5669. Traveling in Jade Citywmw#RE 0ms0kbC++202.2kb2024-10-13 16:55:582024-10-13 16:55:58

Judging History

你现在查看的是最新测评结果

  • [2024-10-13 16:55:58]
  • 评测
  • 测评结果:RE
  • 用时:0ms
  • 内存:0kb
  • [2024-10-13 16:55:58]
  • 提交

answer

//
// Created by 조문성 on 2024. 10. 13..
//
#include <bits/stdc++.h>
#define all(v) v.begin(), v.end()
#define prs(v) sort(all(v)); v.erase(unique(all(v)), v.end())
using namespace std;
using ll = long long;
const int tN = 1 << 21;
ll t1[tN], t2[tN];

void update(int i, ll k, int op) {
    for (; i < tN; i += i & -i)(op ? t1 : t2)[i] += k;
}

ll query(int i, int op) {
    ll res = 0;
    for (; i; i -= i & -i)res += (op ? t1 : t2)[i];
    return res;
}

ll qry(int l, int r, int op) {
    return query(r, op) - query(l - 1, op);
}

const int N = 1'000'000;

int main() {
    cin.tie(0)->sync_with_stdio(0);
    int n, k, m, Q;
    assert(n <= N);
    assert(k <= n);
    assert(m <= N);
    assert(Q <= N);

    cin >> n >> k >> m >> Q;
    vector<ll> W1(n + 1), W2(m + 2);
    vector<int> on1(n + 1, 1), on2(m + 2, 1);
    for (int s = 1; s <= n; s++)cin >> W1[s];
    for (int s = 1; s <= m + 1; s++)cin >> W2[s];
    for (int s = 1; s <= n; s++)update(s, W1[s], 1);
    for (int s = 1; s <= m + 1; s++)update(s, W2[s], 0);
    auto dist = [&](int u, int v) {
        if (u > v)swap(u, v);
        ll l = qry(u, v - 1, 1);
        ll r = qry(1, u - 1, 1) + qry(v, n, 1);
        return min(l, r);
    };
    for (int q = 1; q <= Q; q++) {
        char op;
        cin >> op;
        if (op == 'q') {
            int u, v;
            cin >> u >> v;
            if (u > v)swap(u, v);
            ll l = dist(u, v);
            ll a = dist(u, 1) + dist(k, v) + qry(1, m + 1, 0);
            ll b = dist(u, k) + dist(1, v) + qry(1, m + 1, 0);
            ll mn = min({l, a, b});
            if (mn >= 1e9)cout << "impossible\n";
            else cout << mn << '\n';
        } else if (op == 'c') {
            int i;
            cin >> i;
            if (on1[i])update(i, -W1[i], 1), update(i, 1e9, 1), on1[i] = 0;
            else update(i, -1e9, 1), update(i, W1[i], -1), on1[i] = 1;
        } else {
            int i;
            cin >> i;
            i++;
            if (on2[i])update(i, -W2[i], 0), update(i, 1e9, 0), on2[i] = 0;
            else update(i, -1e9, 0), update(i, W2[i], 0), on2[i] = 1;
        }
    }
}

详细

Test #1:

score: 0
Runtime Error

input:

4 3 1 9
2 3 8 4
1 1
q 3 4
x 0
q 3 4
c 3
q 3 4
c 1
q 3 4
x 0
q 3 4

output:


result: