QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#952040#8471. Lines on a Phone ScreenelecballWA 32ms3712kbC++172.0kb2025-03-26 19:04:232025-03-26 19:04:31

Judging History

This is the latest submission verdict.

  • [2025-03-26 19:04:31]
  • Judged
  • Verdict: WA
  • Time: 32ms
  • Memory: 3712kb
  • [2025-03-26 19:04:23]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;

struct node {
    vector<pii> V; // line, rest
    node() { V.resize(25); }

    void make_leaf(int a) {
        for (int i = 0; i <= 24; i++) {
            V[i] = make_pair((a+i)/24, (a+i)%24);
        }
    }
};

node zero_node;

vector<pii> comb_v(vector<pii> v1, vector<pii> v2) {
    vector<pii> V(25);
    for (int i = 0; i <= 24; i++) {
        int line1 = v1[i].first, rest1 = v1[i].second;
        int line2 = v2[rest1].first, rest2 = v2[rest1].second;
        V[i] = make_pair(line1 + line2, rest2);
    }
    return V;
}

vector<node> seg_tree;

void update(int n, int start, int end, int x, int c) {
    if (start == end) {
        seg_tree[n].make_leaf(c);
        return;
    }

    int mid = (start + end) / 2;
    if (x <= mid) update(2*n, start, mid, x, c);
    else update(2*n+1, mid+1, end, x, c);
    seg_tree[n].V = comb_v(seg_tree[2*n].V, seg_tree[2*n+1].V);
}

vector<pii> query(int n, int start, int end, int left, int right) {
    if (right < start || end < left) return zero_node.V;
    if (left <= start && end <= right) return seg_tree[n].V;

    int mid = (start + end) / 2;
    return comb_v(query(2*n, start, mid, left, right), query(2*n+1, mid+1, end, left, right));
}

int main() {
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    zero_node.make_leaf(0);

    int N, M;
    cin >> N >> M;
    seg_tree.resize(4 * (N+2), node());
    int a;
    for (int x = 1; x <= N; x++) {
        cin >> a;
        update(1, 1, N, x, a);
    }

    while (M--) {
        int op;
        cin >> op;
        if (op == 1) {
            int x, c;
            cin >> x >> c;
            update(1, 1, N, x, c);
        }
        else {
            int l, r;
            cin >> l >> r;
            vector<pii> q = query(1, 1, N, l, r);
            cout << q[0].first + (q[0].second != 0) << "\n";
        }
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3584kb

input:

5 5
8 8 9 12 13
2 1 5
2 2 4
1 5 3
2 1 5
2 2 5

output:

3
2
2
2

result:

ok 4 number(s): "3 2 2 2"

Test #2:

score: 0
Accepted
time: 14ms
memory: 3584kb

input:

1 100000
1
2 1 1
2 1 1
2 1 1
1 1 5
2 1 1
1 1 4
1 1 22
2 1 1
2 1 1
2 1 1
1 1 7
1 1 8
1 1 9
1 1 21
2 1 1
2 1 1
2 1 1
1 1 4
2 1 1
1 1 4
2 1 1
2 1 1
1 1 20
1 1 1
2 1 1
2 1 1
1 1 4
2 1 1
1 1 18
2 1 1
2 1 1
2 1 1
1 1 8
2 1 1
2 1 1
2 1 1
1 1 8
2 1 1
2 1 1
1 1 11
2 1 1
1 1 4
1 1 4
2 1 1
2 1 1
1 1 3
1 1 11
1...

output:

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
...

result:

ok 49984 numbers

Test #3:

score: -100
Wrong Answer
time: 32ms
memory: 3712kb

input:

5 100000
16 3 4 14 7
2 1 1
2 1 2
2 1 5
2 2 3
2 1 5
1 1 15
2 3 5
2 2 5
1 2 9
1 3 16
1 1 17
1 2 15
1 5 13
2 1 3
2 1 4
2 2 5
2 5 5
2 2 4
1 4 5
1 2 2
1 4 3
2 3 4
1 1 13
1 1 19
1 4 24
2 3 4
1 2 18
2 5 5
1 5 10
2 2 3
2 4 5
2 1 4
1 1 14
2 1 5
2 3 4
1 4 21
1 2 10
2 1 4
1 2 22
2 4 4
2 1 3
2 1 3
1 3 20
2 2 3
...

output:

1
1
2
1
2
2
2
2
3
3
1
2
1
2
1
2
2
4
4
2
3
1
3
3
2
2
1
3
2
3
3
3
3
3
2
2
2
2
2
2
1
2
2
1
1
1
1
2
1
1
3
2
3
3
1
4
1
2
2
2
1
1
1
2
1
1
2
1
1
2
1
2
2
2
1
2
3
1
4
3
2
3
3
4
4
4
3
2
3
1
3
2
2
3
1
2
1
2
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
2
2
3
2
2
1
2
2
1
2
2
2
2
1
2
1
1
2
3
2
2
1
1
2
2
1
2
2
2
1
1
2
2
1
2
2
1
...

result:

wrong answer 8th numbers differ - expected: '3', found: '2'