| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 | 
|---|---|---|---|---|---|---|---|
| 359357 | mjhmjh1104 | 새로운 문제 (POI11_met) | C++17 | 2182 ms | 41680 KiB | 
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
long long tree[300006];
long long query(int x) {
    x++;
    long long ret = 0;
    while (x > 0) {
        ret += tree[x];
        x -= x & -x;
    }
    return ret;
}
void update_fenwick(int x, long long v) {
    x++;
    while (x < 300006) {
        tree[x] += v;
        x += x & -x;
    }
}
void update(int l, int r, long long v) {
    update_fenwick(l, v);
    update_fenwick(r + 1, -v);
}
struct Query {
    int q;
    long long l;
    long long r;
    long long m;
};
int n, m, q;
long long p[300006];
vector<pair<pair<int, int>, long long>> updates;
vector<Query> queries;
vector<int> o[300006];
int main() {
    scanf("%d%d", &n, &m);
    for (int i = 0; i < m; i++) {
        int t;
        scanf("%d", &t);
        o[t - 1].push_back(i);
    }
    for (int i = 0; i < n; i++) scanf("%lld", p + i);
    scanf("%d", &q);
    for (int i = 0; i < q; i++) {
        int a, b;
        long long x;
        scanf("%d%d%lld", &a, &b, &x);
        a--, b--;
        updates.push_back({ { a, b }, x });
    }
    for (int i = 0; i < n; i++) queries.push_back(Query{ i, 0, 300002, 150000 });
    for (int t = 0; t < 20; t++) {
        sort(queries.begin(), queries.end(), [](const Query &a, const Query &b) {
            return a.m < b.m;
        });
        fill(tree, tree + 300006, 0);
        int k = 0;
        for (int i = 0; i < q; i++) {
            while (k < n && i > queries[k].m) {
                long long sum = 0;
                for (auto &j: o[queries[k].q]) {
                    sum += query(j);
                    if (sum >= p[queries[k].q]) break;
                }
                if (sum >= p[queries[k].q]) queries[k].r = queries[k].m;
                else queries[k].l = queries[k].m + 1;
                queries[k].m = (queries[k].l + queries[k].r) / 2;
                k++;
            }
            if (updates[i].first.first <= updates[i].first.second) update(updates[i].first.first, updates[i].first.second, updates[i].second);
            else update(updates[i].first.first, m - 1, updates[i].second), update(0, updates[i].first.second, updates[i].second);
        }
        for (; k < n; k++) {
            long long sum = 0;
            for (auto &j: o[queries[k].q]) {
                sum += query(j);
                if (sum >= p[queries[k].q]) break;
            }
            if (sum >= p[queries[k].q]) queries[k].r = queries[k].m;
            else queries[k].l = queries[k].m + 1;
            queries[k].m = (queries[k].l + queries[k].r) / 2;
        }
    }
    sort(queries.begin(), queries.end(), [](const Query &a, const Query &b) {
        return a.q < b.q;
    });
    for (auto &i: queries) {
        if (i.l > 300000) puts("NIE");
        else printf("%lld\n", i.l + 1);
    }
}
컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
