社区讨论

TLE 72 pts,原因:树过高。求优化

P11186三目运算参与者 3已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@m28zn267
此快照首次捕获于
2024/10/14 20:26
去年
此快照最后确认于
2025/11/04 17:11
4 个月前
查看原帖
第 4 组大样例超时,TLE 72.
测了样例,发现是树的高度过高导致的。求优化?
代码:
CPP
#include<bits/stdc++.h>
using namespace std;
long long n,q;
string s;
long long ntot = 1,ls[10000005],rs[10000005],ret[10000005],num[10000005];
long long addnode(long long u){
	ntot++;
	if(ls[u]){
		rs[u] = ntot;
	}else{
		ls[u] = ntot;
	}
	return ntot;
}
long long maketree(long long Start,long long id){
	long long End,tp,now = 0;
	if(s[Start] != 'x'){
		now = 0;
		for(long long i = Start; s[i] >= '0' && s[i] <= '9'; i++){
			now *= 10;
			now += (s[i]-'0');
			End = i;
		}
		ret[id] = 1;
		num[id] = now;
	}else{
		bool flag;
		flag = (s[Start+1] == '<');
		now = 0;
		for(long long i = Start+2; s[i] >= '0' && s[i] <= '9'; i++){
			now *= 10;
			now += (s[i]-'0');
			End = i;
		}
		if(flag){
			num[id] = now;
		}else{
			num[id] = -now;
		}
		ret[id] = 0;
		for(long long i = End; i <= n; i++){
			End = i;
			if(s[i] == '?'){
				tp = addnode(id);
				i = maketree(i+1,tp);
				if(i+1 <= n && s[i+1] == ':'){
					tp = addnode(id);
					i = maketree(i+2,tp);
					End = i;
					break;
				}
			}
		}
	}
	return End;
}
long long dfs(long long now,long long x){
	if(ret[now]){
		return num[now];
	}
	if(num[now] < 0){
		if(x > -num[now]){
			return dfs(ls[now],x);
		}else{
			return dfs(rs[now],x);
		}
	}else{
		if(x < num[now]){
			return dfs(ls[now],x);
		}else{
			return dfs(rs[now],x);
		}
	}
}
long long bigg = 0;
void debug(long long now,long long dep){
	bigg = max(dep,bigg);
	if(ret[now]){
		return;
	}
	debug(ls[now],dep+1);
	debug(rs[now],dep+1);
	return;
}
int main(){
	freopen("expr4.in","r",stdin);
//	freopen("expr4.out","w",stdout);
	scanf("%*d%lld",&q);
	cin>>s;
	n = s.size();
	s = " "+s;
	maketree(1,1);
	debug(1,1);
	printf("%lld %lld",ntot,bigg);
//	for(long long i = 1; i <= q; i++){
//		static long long tpa;
//		scanf("%lld",&tpa);
//		printf("%lld\n",dfs(1,tpa));
//	}
	return 0;
}

回复

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

正在加载回复...