社区讨论

abc411_d求助(玄关)

题目总版参与者 4已保存回复 13

讨论操作

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

当前回复
13 条
当前快照
1 份
快照标识符
@mc6b3asi
此快照首次捕获于
2025/06/21 22:00
9 个月前
此快照最后确认于
2025/11/04 10:20
4 个月前
查看原帖
为什么n*log(n)不能过?
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,q,l[4],op[N],p[N],cnt;
string ss[N],anss;
vector<int> a3,a[N];
void f3(int s,int t),f12(int s,int t,int id);
void f12(int s,int t,int id){
	if(s>t){
		return ;
	}
	int l=0,r=a[id].size()-1,ans=-1;
	while(l<=r){
		int mid=(l+r)/2;
		if(a[id][mid]>=s&&a[id][mid]<=t){
			ans=mid;
			l=mid+1;
		}
		else{
			r=mid-1;
		}
	}
	if(ans==-1){
		return ;
	}
	int i=a[id][ans];
	if(op[i]==1){
		f3(1,i);
	}
	else if(op[i]==2){
		anss=ss[i]+anss;
		f12(1,i-1,id);
	}
}
void f3(int s,int t){
	int l=0,r=a3.size()-1,ans=-1;
	while(l<=r){
		int mid=(l+r)/2;
		if(a3[mid]>=s&&a3[mid]<=t){
			ans=mid;
			l=mid+1;
		}
		else{
			r=mid-1;
		}
	}
	if(ans==-1){
		return ;
	}
	else{
		int i=a3[ans];
		f12(1,i-1,p[i]);
	}
}
int main(){
	cin>>n>>q;
	for(int i=1;i<=q;i++){
		cin>>op[i]>>p[i];
		if(op[i]==1){
			a[p[i]].push_back(i);
		}
		else if(op[i]==2){
			cin>>ss[i];
			a[p[i]].push_back(i);
		}
		else{
			a3.push_back(i);
		}
	}
	f3(1,q);
	cout<<anss;
	return 0;
}

回复

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

正在加载回复...