调了4h+没过求助
查看原帖
调了4h+没过求助
300548
封禁用户楼主2021/2/24 15:42

连样例都没过

#include<bits/stdc++.h>
#define left (node<<1)
#define right (node<<1|1)
#define ll long long
using namespace std;
ll M,n,a[100010],tree[400010];
inline ll read() {
  ll x=0,f=1;
  char ch=getchar();
  while (!isdigit(ch)) {
    if (ch=='-') f=-1;
    ch=getchar();
  }
  while (isdigit(ch)) {
    x=x*10+ch-48;
    ch=getchar();
  }
  return x*f;
}
void build(ll l,ll r,ll node) {
  if(l==r) {
    tree[node]=a[l];
    return;
  }
  ll mid=(l+r)>>1;
  build(l,mid,left);
  build(mid+1,r,right);
  tree[node]=max(tree[left],tree[right]);
}
ll query(ll node,ll s,ll e,ll l,ll r) {
  ll INF=-1;
  if(r<s||e<l)
    return INF;
  if(s==e||(l<=s&&e<=r))
    return tree[node];
  ll mid=(s+e)>>1;
  INF=max(INF,query(left,s,mid,l,r));
  INF=max(INF,query(right,mid+1,e,l,r));
  return INF;
}
int main() {
  n=read(),M=read();
  for(int i=1; i<=n; ++i)
    a[i]=read();
  build(1,n,1);
  while(M--) printf("%lld\n",query(1,1,n,read(),read()));
}
2021/2/24 15:42
加载中...