Basic Data Structure

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct node {
   int fale;
   int len;


}str[400009];
int s,e;
int dir;
#define  xx
int main(){
#ifdef xx
freopen("1.txt","r",stdin);
#endif
    int t;
scanf("%d",&t);
for(int a=1;a<=t;a++){
        int n;
scanf("%d",&n);
printf("Case #%d:\n",a);
dir=1;
s=e=200001;
memset(str,0,sizeof str);
while(n--){
     char g[15];
 scanf("%s",g);
 if(g[0]=='P'&&g[1]=='U'){
     int ans;
 scanf("%d",&ans);
 if(dir==1){
 if(s==e){
      e++;
  str[e].len++;
  str[e].fale=ans;
 }
 else{
 if(ans==str[e].fale){
 str[e].len++;
 }
 else {
   e++;
  str[e].len++;
  str[e].fale=ans;
 }
 
 }
 
 }
 else {
 if(s==e){
 str[s].len++;
 str[s].fale=ans;
 s--;
 }
 else {
 if(ans==str[s+1].fale){
 str[s+1].len++;
 }
 else {
 str[s].len++;
 str[s].fale=ans;
 s--;
 }
 
 }
 
 }
 
 
 }
 else if(g[0]=='R'){//dir
 
 if(dir) dir=0;
 else dir=1;
 }else if(g[0]=='Q'){
 if(e==s){
 printf("Invalid.\n");
 continue;
 
 }
 int res=0;
 if(dir==0){
 if(str[e].fale==0){
     if(str[e].len>=2) res=1;
 if(str[e].len==1&&e-s>=2) res=1;
 }
 else {
 if(str[e-1].len>=2) res=((str[e].len+1)%2)?1:0;
 else if(str[e-1].len==1&&str[e-2].len>=1) res=((str[e].len+1)%2)?1:0;
 else { res=((str[e].len+0)%2)?1:0;   }

 }
 
 }
 else {
 if(str[s+1].fale==0){
     if(str[s+1].len>=2) res=1;
 if(str[s+1].len==1&&e-s>=2) res=1;
 
 }
 else {
      if(str[s+2].len>=2) res=((str[s+1].len+1)%2)?1:0;
  else if(str[s+2].len==1&&str[s+3].len>=1) res=((str[s+1].len+1)%2)?1:0;
  else  res=((str[s+1].len+0)%2)?1:0;   
 }
 
 }
 printf ("%d\n",res);
 
 }else {//pop
 if(dir==1){
 if(str[e].len==1)
  e--;
 else str[e].len--;
 }
 else {
 if(str[s+1].len==1) s++;
 else str[s+1].len--;
  
 }
 }
 
 
 
 
}


}
return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值