1 条题解

  • 0
    @ 2025-8-24 21:43:49

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar KesdiaelKen
    **

    搬运于2025-08-24 21:43:49,当前版本为作者最后更新于2017-08-12 06:55:11,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    这一题还是很明显可以用差分来做的。差分的思想如果有意了解可以在网上搜寻资料,在这里简单讲一下,不做详细介绍——用O(1)的时间复杂度来表示O(N)的覆盖操作,具体见程序。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    int cf[1010][1010]={0};
    int main()
    {
        int n,m;
        cin>>n>>m;
        int gs;cin>>gs;
        int a,b,aa,bb;
        for(int i=0;i<gs;i++)
        {
            scanf("%d%d%d%d",&a,&b,&aa,&bb);
            for(int j=a;j<=aa;j++)//每行做一次差分
    

    {//设b[i]=a[i]-a[i-1]

                cf[j][b]++;
                cf[j][bb+1]--;//前后分别加一,减一,即可代表a的变化
            }
        }
        int sum=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                cf[i][j]+=cf[i][j-1];
                if(cf[i][j])sum++;//如果已被犁到,则计数
            }
        }
        printf("%d",sum);
        return 0;
    }
    
    • 1

    信息

    ID
    2021
    时间
    1000ms
    内存
    125MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者