杨思越
(清洁能源回收站)
15

好好好,只能输出9了QWQ
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[100005];
int f[100005][317];
int query(int l,int r){
int g=log2(r-l+1);
return max(f[l][g],f[r-(1<<g)+1][g]);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
f[i][0]=a[i];
}
int lgn=log2(n);
for(int j=1;j<=lgn;j++){
for(int i=1;i<=n-(1<<lgn)+1;i++){
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
}
while(m--){
int l,r;
cin>>l>>r;
cout<<query(l,r)<<endl;
}
return 0;
}
/*
*/
董子豪
(只会打暴力的人)
17
不是这样改的,应该改成
for(int i=1;i<=n-(1<<j)+1;i++)
可能就对了?(我也不清楚)
杨思越
(清洁能源回收站)
20
TLE30pts
对的还是前三个

#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[100005];
int f[100005][20];
int query(int l,int r){
int g=log2(r-l+1);
return max(f[l][g],f[r-(1<<g)+1][g]);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
f[i][0]=a[i];
}
int lgn=log2(n);
for(int j=1;j<=lgn;j++){
for(int i=1;i<=n-(1<<j)+1;i++){
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
}
while(m--){
int l,r;
cin>>l>>r;
cout<<query(l,r)<<endl;
}
return 0;
}
/*
*/
2345安全卫士
(蛋小黄(蒟蒻))
24
说个有意思的事:我尝试把第四个点下下来结果把电脑卡爆了
2345安全卫士
(蛋小黄(蒟蒻))
31
喵喵喵数组改大
@杨思越 提醒一下,以后发东西都发到问题讨论区,一是因为常规区一小时只能发5贴我们早就超标了就算讨论问题也有可能会被禁言,二是常规区是用来水贴的地方,讨论问题本身要在问题讨论区或自己的班级区域内讨论
桑沫严
(桑沫严)
33
而且建议不要用log2,用数组递推
lg[1]=0
for(int i=2;i<=n;i++) lg[i]=lg[i>>1]+1;