传送门
线段树裸题
注意CSP考场上不要使用以下划线开头的函数和命名空间
code:
#include<queue>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 1100
#define Mid ((l+r)>>1)
#define lson rt<<1,l,Mid
#define rson rt<<1|1,Mid+1,r
using namespace std;
inline void read(int &x)
{
x=0;
int p=1;
char c=getchar();
while(!isdigit(c)){if(c=='-')p=-1;c=getchar();}
while(isdigit(c)) {x=(x<<1)+(x<<3)+(c^'0');c=getchar();}
x*=p;
}
int n,m;
int a[N<<2];
void build(int rt,int l,int r)
{
if(l==r)
{
read(a[rt]);
return;
}
else
{
build(lson);
build(rson);
a[rt]=__gcd(a[rt<<1],a[rt<<1|1]);
}
}
int query(int rt,int l,int r,int L,int R)
{
if(L<=l&&r<=R)
{
return a[rt];
}
else
{
int tmp=0;
if(L<=Mid)tmp=query(lson,L,R);
if(R>Mid)tmp=__gcd(tmp,query(rson,L,R));
return tmp;
}
}
int main()
{
read(n);read(m);
build(1,1,n);
for(int i=1;i<=m;i++)
{
int x,y;
read(x);read(y);
printf("%d\n",query(1,1,n,x,y));
}
return 0;
}