社区讨论
数据过水,线段树AC
P3865【模板】ST 表 & RMQ 问题参与者 7已保存回复 11
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 11 条
- 当前快照
- 1 份
- 快照标识符
- @m2zfxuf5
- 此快照首次捕获于
- 2024/11/02 08:44 去年
- 此快照最后确认于
- 2025/11/04 23:39 4 个月前
借@cj1314的代码加了点优化
CPP#include <bits/stdc++.h>
//#define int long long
#define ls(x) (x<<1)
#define rs(x) (x<<1|1)
#define rep(i,l,r) for(register int i(l);i<=r;++i)
#define per(i,r,l) for(register int i(r);i>=l;--i)
using namespace std;
int n,m,a[100005];
struct tree{
int l,r,big;
}t[400005];
inline char gc()
{
static char buf[1<<20], *p1 = buf, *p2 = buf;
return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1<<20, stdin), p1 == p2) ? EOF : *p1 ++;
}
inline void wr(int x) {
static int sta[20];
int top = 0;
do {
sta[top++] = x % 10, x /= 10;
} while (x);
while (top) putchar(sta[--top] + 48);
}
int read()
{
int n = 0;
bool w = 0;
char c = gc();
for(; c < 48 || c > 57; c = gc())
w = c == 45;
for(n = 0; c >= 48 && c <= 57; c = gc())
n = (n<<3)+(n<<1) + (c ^ 48);
n = w ? -n : n;
return n;
}
inline void build(int p,int l,int r){
t[p].l=l,t[p].r=r;
if(l==r){
t[p].big=a[l];
return;
}
int mid=l+r>>1;
build(ls(p),l,mid);
build(rs(p),mid+1,r);
t[p].big=max(t[ls(p)].big,t[rs(p)].big);
}
inline int ask(int p,int &l,int &r){
if(t[p].r<l||t[p].l>r)return 0;
if(t[p].l>=l&&t[p].r<=r)return t[p].big;
int ret=0;
ret=max(ret,ask(ls(p),l,r));
ret=max(ret,ask(rs(p),l,r));
return ret;
}
int main() {
n=read(),m=read();
rep(i,1,n)a[i]=read();
build(1,1,n);
rep(i,1,m){
int l=read(),r=read();
wr(ask(1,l,r));
putchar('\n');
}
return 0;
}
极限764ms卡过 %%%%%%%%%
回复
共 11 条回复,欢迎继续交流。
正在加载回复...