A08 前缀和 二维前缀和

视频链接:A08 前缀和 二维前缀和_哔哩哔哩_bilibili

Luogu P8218 【深进1.例1】求区间和

 

 

复制代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

int n,m;
int a[100005],s[100005];

int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
      scanf("%d",&a[i]);
        s[i]=s[i-1]+a[i];
    }
    
    scanf("%d",&m);
    for(int i=1;i<=m;i++){
        int l,r; scanf("%d%d",&l,&r);
        printf("%d\n",s[r]-s[l-1]);
    }
}
复制代码

 

Luogu P2280 [HNOI2003] 激光炸弹

 

 

 

复制代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

const int N=5005;
int n,m; //n个目标, 边长为m的正方形
int s[N][N]; //价值前缀和

int main(){
  cin>>n>>m; for(int i=0; i<n; i++){
    int x,y,v; 
    cin>>x>>y>>v;
    x++,y++; //坐标偏移一下
    s[x][y]+=v;
  }
  
  for(int i=1; i<=5001; i++)
    for(int j=1; j<=5001; j++)
      s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1];
      
  int res=0;
  for(int i=m; i<=5001; i++)
    for(int j=m; j<=5001; j++)
      res=max(res,s[i][j]-s[i-m][j]-s[i][j-m]+s[i-m][j-m]);
  cout<<res;
}
复制代码

 

Luogu P1387 最大正方形

复制代码
#include <algorithm>
#include <iostream>
using namespace std;

int a[103][103];
int b[103][103];

int main(){
  int n,m;
  cin>>n>>m;
  for(int i=1; i<=n; i++)
    for(int j=1; j<=m; j++){
      cin>>a[i][j];
      b[i][j]=b[i][j-1]+b[i-1][j]-b[i-1][j-1]+a[i][j];
    }

  int ans=1;
  for(int l=2;l<=min(n,m);l++)
    for(int i=l; i<=n; i++)
      for(int j=l; j<=m; j++)
        if(b[i][j]-b[i-l][j]-b[i][j-l]+b[i-l][j-l]==l*l)
          ans=l;
  cout<<ans;
}
复制代码

 

拓展:

高维前缀和总结(sosdp) - heyuhhh - 博客园 (cnblogs.com)

专题——高维前缀和 - Ruakker - 洛谷博客 (luogu.org)

 

posted @   董晓  阅读(1015)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示