社区讨论

为什么多一个无用的循环会WA4个点

P3865【模板】ST 表 & RMQ 问题参与者 4已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@lo8kuf9x
此快照首次捕获于
2023/10/27 20:16
2 年前
此快照最后确认于
2023/10/27 20:16
2 年前
查看原帖

为什么一个对答案没影响的循环会让我少40分

AC代码
CPP
#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int x=0;char ch=getchar();
	for(;!isdigit(ch);ch=getchar()) ;
	for(;isdigit(ch);ch=getchar()) x=x*10+(ch^48);
	return x;
}
int n,m,st[100001][20],jj[100001],l,r,p;
int main(){
	n=read(),m=read();
	for(int i=1;i<=n;i++) st[i][0]=read();
	for(int i=1,ji=2;ji<=n;i++,ji=ji<<1){
		for(int j=1;j+ji-1<=n;j++) st[j][i]=max(st[j][i-1],st[j+(ji/2)][i-1]);
	}
	for(int i=1;i<=m;i++){
		l=read(),r=read();
		p=(log(r-l+1)/log(2));
		printf("%d\n",max(st[l][p],st[r-(1<<p)+1][p]));
	}
	return 0;
}
60分代码
CPP
#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int x=0;char ch=getchar();
	for(;!isdigit(ch);ch=getchar()) ;
	for(;isdigit(ch);ch=getchar()) x=x*10+(ch^48);
	return x;
}
int n,m,st[100001][20],jj[100001],l,r,p;
int main(){
	n=read(),m=read();
	for(int i=1;i<=n;i++) st[i][0]=read();
	for(int i=1,ji=2;ji<=n;i++,ji=ji<<1){
		for(int j=ji;j<(ji*2);j++) jj[j]=i;
		for(int j=1;j+ji-1<=n;j++) st[j][i]=max(st[j][i-1],st[j+(ji/2)][i-1]);
	}
	for(int i=1;i<=m;i++){
		l=read(),r=read();
		p=(log(r-l+1)/log(2));
		printf("%d\n",max(st[l][p],st[r-(1<<p)+1][p]));
	}
	return 0;
}
只是一个循环而已,为什么会WA4个点?

回复

5 条回复,欢迎继续交流。

正在加载回复...