#include <iostream>
#include <vector>
using namespace std;const int N = 1e6 + 10;
//模板 C=A+Bvector<int> add(vector<int> &A,vector <int> &B)
{vector<int> C;int t = 0; // 用来保存每位的和(包括进位)// 计算加法直到所有位都处理完for(int i=0;i<A.size()||i<B.size();i++){if(i<A.size()) t+=A[i];if(i<B.size()) t+=B[i];//t 里存的 是a[i]+b[i]+上一位进位C.push_back(t%10);// 当前位的结果t /= 10;//进位}if(t)C.push_back(1);return C;
}
int main()
{string a,b;// 太长要用stringvector<int> A,B;//vector自带size 用vecor存储cin>>a>>b;//a="123456"a是string类 所以要把a每一个数抠出来放到vector中for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');//存的是数字 减去一个偏移量 A={6,5,4,3,2,1for(int i= b.size()-1;i>=0;i--) B.push_back(b[i]-'0');//存的是数字 减去一个偏移量 vector<int> C = add(A, B);// 调用 add 函数得到结果 Cfor(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);
}
sr:前i个数的和
sl-1 前l-1 个数的和
把s0 定成0 以1为前缀和
#include<iostream>using namespace std;const int N =100010;int n,m;
int a[N],s[N];
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d",&a[i]);// 计算前缀和 sfor(int i=1;i<=n;i++){s[i]=s[i-1]+a[i];}while(m--){int l,r;scanf("%d%d",&l,&r);printf("%d\n",s[r]-s[l-1] );//得出来l到r的范围}return 0;
}
二维