st表
1.区间最大最小值:
调用c+自带的算法max_element来解决:
#include <iostream> #include <algorithm> using namespace std; int n,q; int a[500005]={0}; int a1[500005][2]={0}; int main() { cin>>n>>q; for(int i=0;i<n;i++){ cin>>a[i]; } for(int i=0;i<q;i++) { cin>>a1[i][0]>>a1[i][1]; } for(int i=0;i<q;i++)//max_element的范围是包含起点不包含终点! { cout<<*max_element(a+(a1[i][0]-1),a+(a1[i][1]) )<<endl; } return 0; }
2:st表
gcd 最大公因数,每一个gcd组里面加上一个数,只会变小或者不变