社区讨论
56pts MLE 玄关求调
P11186三目运算参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m2mz0xwl
- 此快照首次捕获于
- 2024/10/24 15:17 去年
- 此快照最后确认于
- 2024/10/24 16:10 去年
rt
CPP#include <bits/stdc++.h>
using namespace std;
int m,q;
struct re{
int val;
int id;
}x[100010];
int ans[100010];
int a[100100];
string s;
bool cmp(re a,re b){
return a.val<b.val;
}
inline int get(string s,int p){
int x=0;
for(int i=p;;i++){
x=x*10+s[i]-'0';
if(!isdigit(s[i+1])) break;
}
return x;
}
inline void slove(string s,int l,int r){
if(l>r) return ;
if(isdigit(s[0])){
int res=get(s,0);
for(int i=l;i<=r;i++) ans[x[i].id]=res;
return ;
}
string s1="";
string s2="";
int cntw=0,cntm=0;
int p1=s.find('?')+1,p2=0;
for(int i=2;i<s.size();i++){
if(isdigit(s[i])) continue;
if(s[i]=='?') cntw++;
if(s[i]==':') cntm++;
if(cntm==cntw){
p2=i;
break;
}
}
for(int i=p1;i<p2;i++) s1+=s[i];
for(int i=p2+1;i<s.size();i++) s2+=s[i];
int y=get(s,2);
if(s[1]=='<'){
int p=lower_bound(a+l,a+r+1,y)-a;
if(l<=p-1) slove(s1,l,p-1);
if(p<=r) slove(s2,p,r);
}else if(s[1]=='>'){
int p=upper_bound(a+l,a+r+1,y)-a;
if(p<=r) slove(s1,p,r);
if(l<=p-1) slove(s2,l,p-1);
}
}
signed main(){
cin>>m>>q;
cin>>s;
for(int i=1;i<=q;i++){
cin>>x[i].val;
x[i].id=i;
}
sort(x+1,x+1+q,cmp);
for(int i=1;i<=q;i++){
a[i]=x[i].val;
}
slove(s,1,q);
for(int i=1;i<=q;i++){
cout<<ans[i]<<"\n";
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...