Submission #1771048


Source Code Expand

#include <bits/stdc++.h>
#define rep(i, n) for (lli i = 0; i < (n); i++)
#define rrep(i, n) for (lli i = (n)-1; i >= 0; i--)
using namespace std;
using lli = long long int;
struct segtree {
    vector<lli> dat, lazy;
    int n;
    lli unit = 0;
    segtree(int N, vector<int> init)
    {
        n = 1;
        while (N > n) {
            n *= 2;
        }
        dat.assign(2 * n - 1, unit);
        lazy.assign(2 * n - 1, unit);
        rep(i, N)
        {
            dat[i + n - 1] = init[i];
        }
        rrep(i, n - 1) dat[i] = dat[2 * i + 1] + dat[2 * i + 2];
    }
    void eval(int k)
    {
        if (lazy[k] == 0)
            return;
        dat[k] *= (lazy[k] % 2 == 0 ? 1 : -1);
        if (n - 1 > k) {
            lazy[2 * k + 1] += lazy[k];
            lazy[2 * k + 2] += lazy[k];
        }
        lazy[k] = 0;
    }
    void add(int a, int b, lli x)
    {
        add(a, b, x, 0, 0, n);
    }
    void add(int a, int b, lli x, int k, int l, int r)
    {
        eval(k);
        if (b <= l || r <= a)
            return;
        if (a <= l && r <= b) {
            lazy[k] += x;
            eval(k);
        } else {
            add(a, b, x, 2 * k + 1, l, (l + r) / 2);
            add(a, b, x, 2 * k + 2, (l + r) / 2, r);
            dat[k] = dat[2 * k + 1] + dat[2 * k + 2];
        }
    }
    lli query(int a, int b, int k, int l, int r)
    {
        eval(k);
        if (b <= l || r <= a)
            return 0;
        if (a <= l and r <= b)
            return dat[k];
        lli vl = query(a, b, 2 * k + 1, l, (l + r) / 2);
        lli vr = query(a, b, 2 * k + 2, (l + r) / 2, r);
        return vl + vr;
    }
    lli query(int a, int b)
    {
        return query(a, b, 0, 0, n);
    }
};

int main()
{
    int n, p, q, a, b, c;
    cin >> n;

    vector<int> v(n, -1);
    segtree seg(n, v);
    cin >> q;
    rep(i, q)
    {
        cin >> a >> b >> c;
        if (a == 1) {
            seg.add(b, c, 1);
        } else {
            int h = c - b;
            cout << (seg.query(b, c) + h) / 2 << endl;
        }
    }
}

Submission Info

Submission Time
Task H - Counting 1's
User uenoku
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2148 Byte
Status AC
Exec Time 231 ms
Memory 5120 KB

Judge Result

Set Name Sample Subtask1 Subtask2 Subtask3 Subtask4
Score / Max Score 0 / 0 4 / 4 12 / 12 36 / 36 48 / 48
Status
AC × 3
AC × 12
AC × 6
AC × 6
AC × 21
Set Name Test Cases
Sample sample_1.txt, sample_2.txt, sample_3.txt
Subtask1 sample_1.txt, sample_2.txt, sample_3.txt, sub1_1.txt, sub1_2.txt, sub1_3.txt, sub1_4.txt, sub1_5.txt, sub1_6.txt, sub1_7.txt, sub1_8.txt, sub1_9.txt
Subtask2 sample_1.txt, sample_2.txt, sample_3.txt, sub2_1.txt, sub2_2.txt, sub2_3.txt
Subtask3 sample_1.txt, sample_2.txt, sample_3.txt, sub3_1.txt, sub3_2.txt, sub3_3.txt
Subtask4 sample_1.txt, sample_2.txt, sample_3.txt, sub1_1.txt, sub1_2.txt, sub1_3.txt, sub1_4.txt, sub1_5.txt, sub1_6.txt, sub1_7.txt, sub1_8.txt, sub1_9.txt, sub2_1.txt, sub2_2.txt, sub2_3.txt, sub3_1.txt, sub3_2.txt, sub3_3.txt, sub4_1.txt, sub4_2.txt, sub4_3.txt
Case Name Status Exec Time Memory
sample_1.txt AC 1 ms 256 KB
sample_2.txt AC 1 ms 256 KB
sample_3.txt AC 1 ms 256 KB
sub1_1.txt AC 1 ms 256 KB
sub1_2.txt AC 1 ms 256 KB
sub1_3.txt AC 1 ms 256 KB
sub1_4.txt AC 4 ms 384 KB
sub1_5.txt AC 2 ms 256 KB
sub1_6.txt AC 2 ms 384 KB
sub1_7.txt AC 7 ms 384 KB
sub1_8.txt AC 11 ms 384 KB
sub1_9.txt AC 11 ms 512 KB
sub2_1.txt AC 139 ms 5120 KB
sub2_2.txt AC 139 ms 5120 KB
sub2_3.txt AC 143 ms 5120 KB
sub3_1.txt AC 198 ms 5120 KB
sub3_2.txt AC 199 ms 5120 KB
sub3_3.txt AC 200 ms 5120 KB
sub4_1.txt AC 229 ms 5120 KB
sub4_2.txt AC 228 ms 5120 KB
sub4_3.txt AC 231 ms 5120 KB