区间和
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
inline int read(){
int num=0,f=1; char c=getchar();
while(!isdigit(c)){if(c=='-') f=-1; c=getchar();}
while(isdigit(c)){num=(num<<1)+(num<<3)+(c^48); c=getchar();}
return num*f;
}
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define maxn 100010
int sum[maxn<<1],a[maxn];
inline void update(int rt){
sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void build(int l,int r,int rt){
if(l==r){
sum[rt]=a[l]; return;
}
int m=(l+r)>>1;
build(lson); build(rson);
update(rt);
}
int ask(int l,int r,int rt,int nl,int nr){
if(nl<=l and nr>=r) return sum[rt];
int m=(l+r)>>1,ans=0;
if(nl<=m) ans+=ask(lson,nl,nr);
if(nr>m) ans+=ask(rson,nl,nr);
return ans;
}
int main(){
int n,m;
n=read(); m=read();
for(int i=1;i<=n;i++) a[i]=read();
build(1,n,1);
for(int i=1;i<=m;i++){
int x,y;
x=read(); y=read();
cout<<ask(1,n,1,x,y)<<'\n';
}
}
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
inline int read(){
int num=0,f=1; char c=getchar();
while(!isdigit(c)){if(c=='-') f=-1; c=getchar();}
while(isdigit(c)){num=(num<<1)+(num<<3)+(c^48); c=getchar();}
return num*f;
}
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define maxn 100010
int s[maxn<<1],a[maxn];
inline void update(int rt){
s[rt]=max(s[rt<<1],s[rt<<1|1]);
}
void build(int l,int r,int rt){
if(l==r){
s[rt]=a[l]; return;
}
int m=(l+r)>>1;
build(lson); build(rson);
update(rt);
}
int ask(int l,int r,int rt,int nl,int nr){
if(nl<=l and nr>=r) return s[rt];
int m=(l+r)>>1,ans=-1;
if(nl<=m) ans=max(ans,ask(lson,nl,nr));
if(nr>m) ans=max(ans,ask(rson,nl,nr));
return ans;
}
int main(){
int n,m;
n=read(); m=read();
for(int i=1;i<=n;i++) a[i]=read();
build(1,n,1);
for(int i=1;i<=m;i++){
int x,y;
x=read(); y=read();
cout<<ask(1,n,1,x,y)<<" ";
}
}
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
inline int read(){
int num=0,f=1; char c=getchar();
while(!isdigit(c)){if(c=='-') f=-1; c=getchar();}
while(isdigit(c)){num=(num<<1)+(num<<3)+(c^48); c=getchar();}
return num*f;
}
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define maxn 100010
int s[maxn<<1],a[maxn];
inline void update(int rt){
s[rt]=min(s[rt<<1],s[rt<<1|1]);
}
void build(int l,int r,int rt){
if(l==r){
s[rt]=a[l]; return;
}
int m=(l+r)>>1;
build(lson); build(rson);
update(rt);
}
int ask(int l,int r,int rt,int nl,int nr){
if(nl<=l and nr>=r) return s[rt];
int m=(l+r)>>1,ans=1e9;
if(nl<=m) ans=min(ask(lson,nl,nr),ans);
if(nr>m) ans=min(ask(rson,nl,nr),ans);
return ans;
}
int main(){
int n,m;
n=read(); m=read();
for(int i=1;i<=n;i++) a[i]=read();
build(1,n,1);//¼ÇµÃ½¨Ê÷
for(int i=1;i<=m;i++){
int x,y;
x=read(); y=read();
cout<<ask(1,n,1,x,y)<<" ";
}
}