AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 应用
  • 更多
    • 题解
    • 分享
    • 商店
    • 问答
  • 吐槽
  • 登录/注册

AcWing 1270. 数列区间最大值

作者: 作者的头像   那必须得是我了 ,  2023-01-24 13:03:53 ,  所有人可见 ,  阅读 3


0


#include<iostream>
#include<cstdio>
#include <climits>
using namespace std;

const int N = 1e5+10;

int n,m;
int w[N];
struct Node
{
    int l,r;
    int maxx;
}tr[4*N];


void build(int u,int l,int r)
{
    if(l==r) tr[u] = {l,r,w[r]};
    else
    {
        tr[u] = {l,r};
        int mid = l+r>>1;
        build(u<<1,l,mid),build(u<<1 | 1,mid+1,r);
        tr[u].maxx = max(tr[u<<1].maxx,tr[u<<1 | 1].maxx);
    }

}

int query(int u,int l,int r)
{
    if(tr[u].l >=l && tr[u].r <= r)   return tr[u].maxx;
    int mid = tr[u].l + tr[u].r >> 1;
    int sum=0;
    int maxx=INT_MIN;
    if(l<=mid)  maxx=query(u<<1,l,r);
    if(r>mid)   maxx=max(maxx,query(u<<1 | 1,l,r));
    return maxx;
}


int main()
{
    scanf("%d%d", &n, &m);
    for(int i=1;i<=n;i++)   scanf("%d",&w[i]);
    build(1,1,n);

    int l,r;
    while(m--)
    {
        scanf("%d%d", &l, &r);
        printf("%d\n",query(1,l,r));
    }

    return 0;
}

0 评论

你确定删除吗?
1024
x

© 2018-2023 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息