标签:cpp print cst cin define 复杂度 中间 支持 log
以模版题为例:传送门
#include <iostream>
#include <cstdio>
#include <cmath>
#define maxn 100005
using namespace std;
int n, q, logMax;
int a[maxn];
int f[maxn][31];
int read()
{
int x=0, f=1; char c=getchar();
while(c<'0' || c>'9') {if(c=='-') f=-1; c=getchar();}
while(c>='0' && c<='9') {x=x*10+c-'0'; c=getchar();}
return x*=f;
}
int main()
{
cin>>n>>q;
logMax=(int)log2(n);
for(int i=1;i<=n;i++) a[i]=read(), f[i][0]=a[i];
for(int j=1;j<=logMax;j++)
for(int i=1;i<=n-(1<<j)+1;i++) //1<<i 等价于 pow(2, i)
f[i][j]=max(f[i][j-1], f[i+(1<<(j-1))][j-1]);
for(int i=1;i<=q;i++)
{
int l=read(), r=read();
int p=(int)log2(r-l+1);
printf("%d\n",max(f[l][p], f[r-(1<<p)+1][p]));
}
return 0;
}
标签:cpp print cst cin define 复杂度 中间 支持 log
原文地址:https://www.cnblogs.com/BigYellowDog/p/9746426.html