输入输出样例
输入样例#1: 复制
8 8 9 3 1 7 5 6 0 8 1 6 1 5 2 7 2 6 1 8 4 8 3 7 1 8
输出样例#1: 复制
9 9 7 7 9 8 7 9
说明
对于30%的数据,满足: 1 \leq N, M \leq 101≤N,M≤10
对于70%的数据,满足: 1 \leq N, M \leq {10}^51≤N,M≤105
对于100%的数据,满足: 1 \leq N \leq {10}^5, 1 \leq M \leq {10}^6, a_i \in [0, {10}^9], 1 \leq l_i \leq r_i \leq N1≤N≤105,1≤M≤106,ai∈[0,109],1≤li≤ri≤N
一道模板题
直接看代码
#include<bits/stdc++.h>
using namespace std;
int st[100005][21];
int m, n;
void y(){
int k = log2(n);
for(int j = 1; j <= k; j++){
for(int i = 1; i <= (n - (1 << j) + 1); i++){
st[i][j] = max(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
}
}
}
int main()
{
std::ios::sync_with_stdio(false);//记得加快读
cin >> n >> m;
for(int i = 1; i <= n; i++)
cin >> st[i][0];
y();
for(int i = 1; i <= m; i++){
int l , r;
cin >> l >> r;
int k = log2(r - l + 1);
printf("%d\n", max(st[l][k], st[r - (1 << k) + 1][k]));
}
return 0;
}