
二. 理论

三. 代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N=1e5+10;
int n, m;
class PrefixAnd
{
public:
int s[N];//前缀和数组,最初值是原数组值
public:
PrefixAnd()
{
initIO();
}
void initIO()
{
// 关闭输入输出缓存,使效率提升
ios::sync_with_stdio(false);
// 解除cin和cout的默认绑定,来降低IO的负担使效率提升
cin.tie(nullptr);
cout.tie(nullptr);
}
//预处理s数组使其变成前缀和数组
void initS()
{
for(int i=1;i<=n;++i)
s[i]+=s[i-1];//s[i]=s[i-1]+a[i]
}
//得到a[l]到a[r]之间所有数的和
int getPa(int l, int r)
{
return s[r]-s[l-1];
}
}pa;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;++i)
cin>>pa.s[i];
pa.initS();//预处理前缀和数组
while(m--)
{
int l, r;
cin>>l>>r;
cout<<pa.getPa(l, r)<<endl;
}
}