前缀和、差分
by lqx
一维前缀和
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+9;
int n,m,a[N],s[N];
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
s[i]=s[i-1]+a[i];
}
cin>>m;
while(m--){
int l,r;cin>>l>>r;
cout<<s[r]-s[l-1]<<'\n';
}
}
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+9;
int n,sum,a[N],s[N];
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
s[i]=s[i-1]+a[i];
}
for(int i=1;i<n;i++)
sum+=a[i]*(s[n]-s[i]);
cout<<sum;
}
#include <bits/stdc++.h>
using namespace std;//k+1区间最大和
#define int long long
const int N=2e6+9;
int n,k,maxx=-99999,a[N],s[N];
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
s[i]=s[i-1]+a[i];
}
for(int i=1;i<=n-k;i++){
maxx=max(maxx,s[i+k]-s[i-1]);
}
cout<<maxx;
}
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+9;
int n,k,maxx=-9999,a[N],s[N];
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
s[i]=s[i-1]+a[i];
}
for(int i=1;i<=n-k+1;i++)
maxx=max(maxx,s[i+k-1]-s[i-1]);
cout<<maxx;
}
二维前缀和
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=209;
int n,maxx=-9999,a[N][N],s[N][N];
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
cin>>a[i][j];
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
}
for(int x1=1;x1<=n;x1++)
for(int y1=1;y1<=n;y1++)
for(int x2=x1;x2<=n;x2++)
for(int y2=y1;y2<=n;y2++)
maxx=max(maxx,s[x2][y2]-s[x2][y1-1]-s[x1-1][y2]+s[x1-1][y1-1]);
cout<<maxx;
}
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=209;
int n,m,c,x,y,maxx=-9999,a[N][N],s[N][N];
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>m>>c;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>a[i][j];
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
}
for(int i=c;i<=n;i++)
for(int j=c;j<=m;j++){
if(s[i][j]-s[i-c][j]-s[i][j-c]+s[i-c][j-c]>maxx){
maxx=s[i][j]-s[i-c][j]-s[i][j-c]+s[i-c][j-c];
x=i-c+1,y=j-c+1;
}
}
cout<<x<<' '<<y;
}