49分 TLE了 求优化
查看原帖
49分 TLE了 求优化
677489
Aaron530楼主2025/7/23 18:48
#include <bits/stdc++.h>
using namespace std;
const int logn=17;
int n,m;
int a[1000005];
int Log2[1000005];
int maxn[1000005][20];
void init()
{
    Log2[0]=-1;
    for(int i=1;i<=n;i++)
        Log2[i]=Log2[i>>1]+1;
}
inline int read()
{
	int x=0,f=1;
    char ch=getchar();
	while(ch<'0' || ch>'9')
    {
        if (ch=='-')
            f=-1;
        ch=getchar();
    }
	while(ch>='0' && ch<='9')
    {
        x=x*10+ch-48;
        ch=getchar();
    }
	return x*f;
}
inline void write(int x)
{
    if(x<0)
        putchar('-'),x=-x;
    if(x>=10)
        write(x/10);
    putchar(x%10+'0');
}
int main()
{
    n=read();m=read();
    init();
    for(int i=1;i<=n;i++)
    {
        a[i]=read();
        maxn[i][0]=a[i];
    }
    for(int k=1;k<=Log2[n];k++)
        for(int i=1;i+(1<<k)<=n+1;i++)
            maxn[i][k]=max(maxn[i][k-1],maxn[i+(1<<(k-1))][k-1]);
    
    while(m--)
    {
        int l,r;
        cin>>l>>r;
        int k=Log2[r-l+1];
        write(max(maxn[l][k],maxn[r-(1<<k)+1][k]));
        putchar('\n');
    }
    return 0;
}

已经这样了还能再优化吗

2025/7/23 18:48
加载中...