B3656 【模板】双端队列 1 求调 悬关
  • 板块灌水区
  • 楼主Mydeimos
  • 当前回复27
  • 已保存回复42
  • 发布时间2024/10/23 16:32
  • 上次更新2024/10/23 18:42:05
查看原帖
B3656 【模板】双端队列 1 求调 悬关
778283
Mydeimos楼主2024/10/23 16:32

思路已经教练认证,没有问题,对拍了一下,也没查出有什么问题,别问为什么没用deque,问就是会MLE

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 2000005
int q,n,a,b,l[N],t[N],r[N],cnt,k[N];string s;
int main(){
	cin>>q,n=N>>1;
	for(int i=1;i<=q;i++){
		cin>>s>>a;
		if(s=="push_back"||s=="push_front"){
			cnt++,cin>>t[cnt];
			if(k[a]==0) l[a+n]=r[a+n]=a+n;
			if(s=="push_front") r[cnt]=r[a+n],l[r[a+n]]=cnt,r[a+n]=cnt,l[cnt]=a+n;
			else l[cnt]=l[a+n],r[l[a+n]]=cnt,l[a+n]=cnt,r[cnt]=a+n;
			k[a]++;
		}else if(k[a]){
			if(s=="pop_front"||s=="pop_back"){
				if(s=="pop_front") l[r[r[a+n]]]=a+n,r[a+n]=r[r[a+n]],k[a]--;
				else r[l[l[a+n]]]=a+n,l[a+n]=l[l[a+n]],k[a]--;
			}else if(s=="size") cout<<k[a]<<endl;
			else if(s=="front") cout<<t[r[a+n]]<<endl;
			else cout<<t[l[a+n]]<<endl;
		}
	}fclose(stdin),fclose(stdout);
	return 0;
}
2024/10/23 16:32
加载中...