Description

正四面体总共有4个面,每个面都是一个正三角形。现在把它的一个面标记上字母A,如图 3中所示,A标记在底面上:

于是,这个正四面体的滚动过程就可以用一个只包含“L”“R”“B”的字符串来描述。初始时,正四面体的A面朝下,现在SECSA将给这个正四面体一串滚动指令——当然就是一个这样的字符串——让这个正四面体每秒滚动一下。也就是说,第1秒内正四面体A面朝下,第1秒末执行第一条指令,第2秒末执行第2条指令,依次类推,直至将整个指令串执行完毕。

你的任务就是当SECSA询问你的时候告诉他:这个正四面体在第L秒到第R秒内A面有多少秒朝着地面。当然,SECSA可能因为对这个正四面体的滚动路径不满意,他随时会修改他的某一条指令。因此你的程序应该能执行下面两个操作:

(1)                接受SECSA修个第i条指令的信息

(2)                回答SECSA的“在第L秒到第R秒内A面有多少秒朝着地面”的询问

例如,假如原指令串为“LLLLB”,那么第1、4、6秒内A面是朝下的。此时,如果SECSA向你询问第3秒到第6秒的情况,你就应该回答“2”。而SECSA将第3条指令修改为“R”的话,指令串就变成了“LLRLB”,那么正四面体就只有在第1、5秒内A面朝下了。如图 5所示:

一个正四面体的一次滚动显然有3个方向可以选择:向左(L)、向右(R)、向后(B)。如图 4所示:

Input

输入文件的第一行是一个整数n,表示指令串中包含的指令条数。

输入文件的第二行是一个字符串,共包含n个字符,每个字符是“L”“R”“B”之一,表示初始的指令串。

输入文件的第三行是一个整数m,表示你的程序需要处理的操作总数。

接下去m行,每行描述一个操作,为以下两种格式之一:

(1)                0 i c:表示把第i个操作改成c,c为“L”“R”“B”之一

(2)                1 L R:表示询问第L秒到第R秒内,A面有多少秒朝下

输入文件保证:1<=i<=N,1<=L<=R<=N+1

Output

输出文件对于每一个询问操作依次输出你的程序给出的回答,每个回答为一个整数,占一行。

正四面体的A面相对于向前方向有四种位置,分别记为0,1,2,3,于是可以用线段树维护,区间维护的信息为经过区间内的指令后正四面体的状态变化,表示为一个置换,另外还要记录以状态x开始,执行区间内指令的过程中A面朝下的次数,这样就可以方便地合并区间信息了

#include<cstdio>
int _(){
int x=,c=getchar();
while(c<)c=getchar();
while(c>)x=x*+c-,c=getchar();
return x;
}
int _id[];
int _c(){
int c=getchar();
while(c<'A'||c>'Z')c=getchar();
return _id[c];
}
int nx[][],c[][],ss[],sp=;
int nx0[][]={{,,,},{,,,},{,,,}};
inline void set(int w,int x){
for(int j=;j<;++j)c[w][j]=!(nx[w][j]=nx0[x][j]);
}
inline void up(int w){
int l=w<<,r=l^;
for(int j=;j<;++j)nx[w][j]=nx[r][nx[l][j]],c[w][j]=c[l][j]+c[r][nx[l][j]];
}
int main(){
_id['L']=;
_id['R']=;
_id['B']=;
int n=_();
for(int i=,x,w;i<=n;++i){
x=_c();
set(i+,x);
}
for(int i=;i;--i)up(i);
for(int q=_();q;--q)if(_()){
int l=_()-,r=_()-,v=,s=;
if(l>=){
for(int w=l+;w;w>>=)if(w&)ss[sp++]=w^;
while(sp){
int w=ss[--sp];
s-=c[w][v];
v=nx[w][v];
}
}else ++s;
for(int w=r+;w;w>>=)if(w&)ss[sp++]=w^;
while(sp){
int w=ss[--sp];
s+=c[w][v];
v=nx[w][v];
}
printf("%d\n",s);
}else{
int w=_()+,x=_c();
set(w,x);
for(w>>=;w;w>>=)up(w);
}
return ;
}

bzoj2518: [Shoi2010]滚动的正四面体的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. 【前端性能】高性能滚动 scroll 及页面渲染优化

    最近在研究页面渲染及web动画的性能问题,以及拜读<CSS SECRET>(CSS揭秘)这本大作. 本文主要想谈谈页面优化之滚动优化. 主要内容包括了为何需要优化滚动事件,滚动与页面渲染的 ...

  3. 【开源】专业K线绘制[K线主副图、趋势图、成交量、滚动、放大缩小、MACD、KDJ等)

    这是一个iOS项目雅黑深邃的K线的绘制. 实现功能包括K线主副图.趋势图.成交量.滚动.放大缩小.MACD.KDJ,长按显示辅助线等功能 预览图 最后的最后,这是项目的开源地址:https://git ...

  4. Android点击列表后弹出输入框,所点击项自动滚动到输入框上方

    使用微信的朋友圈会发现,点击某一条评论后输入框会弹出来,然后所点击的那一项会自动地滚动到输入框上方的位置,这样如果开始所点击的评论在屏幕很下方的话,就不会被输入框遮住,虽然微信这一点在我的MX2频繁点 ...

  5. iOScollectionView广告无限滚动(Swift实现)

    今天公司里的实习生跑过来问我一般App上广告的无限滚动是怎么实现的,刚好很久没写博客了,就决定写下了,尽量帮助那些处于刚学iOS的程序猿. 做一个小demo,大概实现效果如下图所示: 基本实现思路: ...

  6. MUI开发APP,scroll组件,运用到区域滚动

    最近在开发APP的过程中,遇到一个问题,就是内容有一个固定的头部和底部.         头部就是我们常用的header了,底部的话,就放置一个button,用来提交页面数据或者进入下一个页面等,效果 ...

  7. fullpage.js全屏滚动插件使用小结

    刚做好公司网站,通过全屏滚动,显著提高了官网的浏览体验.遂总结一下使用fullpage.js的方法.欢迎指正 一. fullpage.js简介 fullpage.js是一套实现浏览器全屏滚动的js插件 ...

  8. 详细分析Android viewpager 无限循环滚动图片

    由于最近在忙于项目,就没时间更新博客了,于是趁着周日在房间把最近的在项目中遇到的技术总结下.最近在项目中要做一个在viewpager无限滚动图片的需求,其实百度一下有好多的例子,但是大部分虽然实现了, ...

  9. 使用UICollectionView实现首页的滚动效果

    实现类似这样的效果,可以滚动大概有两种实现方案 1. 使用scrollview来实现 2. 使用UICollectionView来实现 第一种比较简单,而且相对于性能来说不太好,于是我们使用第二种方案 ...

随机推荐

  1. Java里正则表达式

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...

  2. YUV格式&像素

    一幅彩色图像的基本要素是什么? 说白了,一幅图像包括的基本东西就是二进制数据,其容量大小实质即为二进制数据的多少.一幅1920x1080像素的YUV422的图像,大小是1920X1080X2=4147 ...

  3. PHP判断变量是否为整型

    1.使用is_int() 2.使用is_numeric() 两个函数的区别,当变量为'1'时, is_int()的返回值为false, is_numeric()的返回值为true 当变量为1时, 两个 ...

  4. IEnumerable接口的Aggregate方法

    以前小猪为了累加一个集合中的类容通常会写出类似这样的C#代码: string result ="": foreach (var item in items) { result+=i ...

  5. require.js的使用

    RequireJS是一个非常小巧的JavaScript模块载入框架,是AMD规范最好的实现者之一.最新版本的RequireJS压缩后只有14K,堪称非常轻量.它还同时可以和其他的框架协同工作,使用Re ...

  6. sqlserver存储过程批量插入数据

    在系统中经常会遇到向数据库中批量插入数据情况,存储过程中没有数组,只有通过字符串分割循环插入,下面是一个本人研究的一个例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 c ...

  7. 快消零售行业怎么用K2做开关店管理?

    提起迪卡侬,想到的便是它汇聚所有运动于同一个屋檐下的盛况.从来没有一家体育用品零售店可以像迪卡侬一样,涵盖几乎所有级别的运动产品.从入门级到最专业的运动产品,应有尽有,不仅产品质量有保证,价格也平易近 ...

  8. IIS+PHP配置一次成功无错误版

    1.首先去PHP官网下载php的压缩包(.zip),由于web服务器是IIS所以尽量使用线程不安全版本的,我下载的是: VC11 x86 Non Thread Safe (2015-May-14 18 ...

  9. Java中二维数组与面向对象

    1:二维数组(理解) (1)元素是一维数组的数组. (2)格式: A:数据类型[][] 数组名 = new 数据类型[m][n]; B:数据类型[][] 数组名 = new 数据类型[m][]; C: ...

  10. 《Java中方法的重写》

    //方法的重写 /* 注意:方法的重写要遵循“两同两小一大”规则 “两同”即方法名相同.形参列表相同: “两小”(1)指的是子类方法返回值类型比父类方法的返回值类型更小或相等,[什么意思?] (2)子 ...