提出 #76483004


ソースコード 拡げる

#include <bits/stdc++.h>
using namespace std;

#define int long long

const int MAXQ = 3e5 + 5;

int n, q;
int tree[2][MAXQ];
int lastRow[MAXQ], lastCol[MAXQ];

void add(int op, int x, int v)
{
    x++; // 时间从 0 开始,所以树状数组下标整体 +1
    while (x <= q + 1)
    {
        tree[op][x] += v;
        x += x & -x;
    }
}

int sum(int op, int x)
{
    x++;
    int res = 0;
    while (x > 0)
    {
        res += tree[op][x];
        x -= x & -x;
    }
    return res;
}

// 统计时间 <= x 的数量
int count_leq(int op, int x)
{
    return sum(op, x);
}

// 统计时间 < x 的数量
int count_less(int op, int x)
{
    if (x == 0) return 0;
    return sum(op, x - 1);
}

// 统计时间 > x 的数量
int count_greater(int op, int x)
{
    return n - count_leq(op, x);
}

signed main()
{
    cin >> n >> q;

    // 初始时刻 0,所有行、列都还没操作过
    add(0, 0, n); // 行的最后操作时间
    add(1, 0, n); // 列的最后操作时间

    int ans = 0;

    for (int t = 1; t <= q; t++)
    {
        int op, x;
        cin >> op >> x;

        if (op == 1)
        {
            // 把第 x 行涂黑
            int old = lastRow[x];

            // 这行原来有多少黑格:lastCol < old
            int before = count_less(1, old);

            // 现在这行全部变黑,一共有 n 个黑格
            ans += n - before;

            add(0, old, -1);
            add(0, t, 1);
            lastRow[x] = t;
        }
        else
        {
            // 把第 x 列涂白
            int old = lastCol[x];

            // 这一列原来有多少黑格:lastRow > old
            int before = count_greater(0, old);

            ans -= before;

            add(1, old, -1);
            add(1, t, 1);
            lastCol[x] = t;
        }

        cout << ans << '\n';
    }

    return 0;
}

提出情報

提出日時
問題 E - E-liter
ユーザ nxzwcry
言語 C++23 (GCC 15.2.0)
得点 475
コード長 1961 Byte
結果 AC
実行時間 244 ms
メモリ 13504 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 475 / 475
結果
AC × 2
AC × 55
セット名 テストケース
Sample sample-01.txt, sample-02.txt
All 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt, 40.txt, 41.txt, 42.txt, 43.txt, 44.txt, 45.txt, 46.txt, 47.txt, 48.txt, 49.txt, 50.txt, 51.txt, 52.txt, 53.txt, 54.txt, 55.txt, sample-01.txt, sample-02.txt
ケース名 結果 実行時間 メモリ
03.txt AC 1 ms 3420 KiB
04.txt AC 1 ms 3492 KiB
05.txt AC 159 ms 5924 KiB
06.txt AC 158 ms 5872 KiB
07.txt AC 1 ms 3492 KiB
08.txt AC 1 ms 3440 KiB
09.txt AC 160 ms 5976 KiB
10.txt AC 157 ms 5896 KiB
11.txt AC 189 ms 8880 KiB
12.txt AC 185 ms 8328 KiB
13.txt AC 160 ms 8152 KiB
14.txt AC 158 ms 6016 KiB
15.txt AC 1 ms 3416 KiB
16.txt AC 1 ms 3840 KiB
17.txt AC 1 ms 3584 KiB
18.txt AC 4 ms 3720 KiB
19.txt AC 36 ms 4440 KiB
20.txt AC 180 ms 10760 KiB
21.txt AC 180 ms 8192 KiB
22.txt AC 180 ms 8148 KiB
23.txt AC 189 ms 9892 KiB
24.txt AC 217 ms 9808 KiB
25.txt AC 189 ms 9968 KiB
26.txt AC 187 ms 9900 KiB
27.txt AC 189 ms 11260 KiB
28.txt AC 182 ms 8320 KiB
29.txt AC 232 ms 12888 KiB
30.txt AC 165 ms 8088 KiB
31.txt AC 233 ms 13168 KiB
32.txt AC 181 ms 8156 KiB
33.txt AC 236 ms 13292 KiB
34.txt AC 198 ms 8592 KiB
35.txt AC 236 ms 13476 KiB
36.txt AC 171 ms 8132 KiB
37.txt AC 234 ms 13380 KiB
38.txt AC 167 ms 8296 KiB
39.txt AC 234 ms 13480 KiB
40.txt AC 192 ms 8924 KiB
41.txt AC 188 ms 8212 KiB
42.txt AC 189 ms 9932 KiB
43.txt AC 188 ms 9900 KiB
44.txt AC 188 ms 9896 KiB
45.txt AC 190 ms 11180 KiB
46.txt AC 205 ms 9896 KiB
47.txt AC 207 ms 9900 KiB
48.txt AC 207 ms 9936 KiB
49.txt AC 209 ms 11216 KiB
50.txt AC 234 ms 13484 KiB
51.txt AC 231 ms 13396 KiB
52.txt AC 244 ms 13412 KiB
53.txt AC 227 ms 13484 KiB
54.txt AC 226 ms 13484 KiB
55.txt AC 242 ms 13504 KiB
sample-01.txt AC 2 ms 3352 KiB
sample-02.txt AC 1 ms 3460 KiB