• 洛谷 P3397 地毯(二位前缀和+差分)


    题目链接:https://www.luogu.com.cn/problem/P3397

    画图理解:

    二维前缀和:

    s[x][y]=s[x-1][y]+s[x][y-1]-s[x-1][y-1]+a[x][y]

    二维差分:(对(x1,y1)到(x2,y2)的a +1)

    d[x1][y1]+=1;
    d[x1][y2+1]-=1;
    d[x1+1][y2]-=1;
    d[x2+1][y2+1]+=1;

    这道题只需要构建出二维差分数组d,然后最后对d做前缀和即可。

    AC代码:

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 int n,m;
     5 int d[1005][1005];
     6 int main(){
     7     scanf("%d%d",&n,&m);
     8     for(int i=1;i<=m;i++){
     9         int x1,y1,x2,y2;
    10         scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
    11         d[x1][y1]+=1;
    12         d[x1][y2+1]-=1;
    13         d[x2+1][y1]-=1;
    14         d[x2+1][y2+1]+=1;
    15     }
    16     for(int i=1;i<=n;i++){
    17     for(int j=1;j<=n;j++) printf("%d ",d[i][j]+=d[i-1][j]+d[i][j-1]-d[i-1][j-1]);
    18     printf("
    ");
    19     }
    20     return 0;
    21 }
    AC代码
  • 相关阅读:
    MIB Browser使用方法
    RestTemplate调用https接口跳过证书验证
    Looper&Handler
    Thread类以及常见得同步类
    Android 关键类(RefBase,sp, wp)
    JNI
    binder
    struct enum union区别
    Q_PROPERTY
    linux 命令
  • 原文地址:https://www.cnblogs.com/New-ljx/p/13414183.html
Copyright © 2020-2023  润新知