O2 ?
查看原帖
O2 ?
991515
for_fo_f楼主2024/10/13 12:19

比赛的时候编译器没开O2,一直RE,结果一开O2就AC了,

??????????

#include<bits/stdc++.h>
using namespace std;
const int N=1e7+9;
string s;
struct node{
	int l,r;
};
int z[N],d[N],r;
int ans[N];
void solve(int l,int r,node X){
	if(X.l>X.r)return;
	if(s[l]!='x'){
		int a=0;
		for(int i=l;i<=r;i++)a=a*10+s[i]-'0';
		for(int i=X.l;i<=X.r;i++)ans[i]=a;
		return;
	}
	int	x=l+2,a=0;
	while(s[x]>='0'&&s[x]<='9'){
		a=a*10+s[x]-'0';
		++x;
	}
	int mid=d[x];
	if(s[l+1]=='<'){
		solve(x+1,mid-1,{X.l,a-1});
		solve(mid+1,r,{a,X.r});
	}else{
		solve(x+1,mid-1,{a+1,X.r});
		solve(mid+1,r,{X.l,a});
	}
}
int m,q;
int main(){
	scanf("%d%d\n",&m,&q);
	cin>>s;
	int n=s.length();
	for(int i=0;i<n;i++){
		if(s[i]=='?')z[++r]=i;
		if(s[i]==':')d[z[r--]]=i;
	}
	solve(0,s.length()-1,{1,m+1});
	while(q--){
		int x;
		scanf("%d",&x);
		printf("%d\n",x<=m?ans[x]:ans[m+1]);
	}
	
}
2024/10/13 12:19
加载中...