社区讨论

ABC434 D题求条

题目总版参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mil4zqjv
此快照首次捕获于
2025/11/30 11:04
3 个月前
此快照最后确认于
2025/12/02 16:35
3 个月前
查看原帖
rt
CPP
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;

const int N = 2e3+59;

int n, scnt[N][N], si[N][N], x[N];

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n;
    for (int i = 1; i <= n; i++) {
        int u, d, l, r;
        cin >> u >> d >> l >> r;
        //计算个数
        scnt[u][l]++;
        scnt[u][r + 1]--;
        scnt[d + 1][l]--;
        scnt[d + 1][r + 1]++;
        //计算每个格子覆盖云朵编号的和
        si[u][l] += i;
        si[u][r + 1] -= i;
        si[d + 1][l] -= i;
        si[d + 1][r + 1] += i;
    }
    //计算前缀和
    for (int i = 0; i <= 2025; i++) {
        for (int j = 1; j <= 2025; j++) {
            scnt[i][j] += scnt[i][j - 1];
            si[i][j] += si[i][j - 1];
        }
    }
    for (int i = 1; i <= 2025; i++) {
        for (int j = 0; j <= 2025; j++) {
            scnt[i][j] += scnt[i - 1][j];
            si[i][j] += si[i - 1][j];
        }
    }
    int sum = 0;
    for (int i = 1; i <= 2000; i++) {
        for (int j = 1; j <= 2000; j++) {
            if (scnt[i][j] == 0)
                sum++;
            if (scnt[i][j] == 1)
                x[si[i][j]]++;
        }
    }
    for (int i = 1; i <= n; i++)
        cout << sum + x[i] << endl;
    return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...