CF145E Lucky Queries
英文题面不放了,直接上翻译:
题目描述
给你n个数,每个数是4或者7,给你m个任务完成
switch l r 把[l,r]位置的4换成7,7换成4
count 计算n个数的最长不下降子序列的长度
N个数的不下降子序列是这n个数移除掉0个或者若干个位置的数,并且满足从第2个数开始每一个数不小于前一个数的大小。
输入格式
第一行n,m
第二行n个数字
接下来m行每行一个命令
输出格式
对于每一个count的命令,输出n个数的最长不下降子序的长度
输入输出样例
2 3
47
count
switch 1 2
count
2
1
3 5
747
count
switch 1 1
count
switch 1 3
count
2
3
2
题解Here!
#include<iostream>
#include<algorithm>
#include<cstdio>
#define LSON rt<<1
#define RSON rt<<1|1
#define FOUR(x) a[x].four
#define SEVEN(x) a[x].seven
#define SIGN(x) a[x].c
#define UPON(x) a[x].upon
#define DOWN(x) a[x].down
#define LSIDE(x) a[x].l
#define RSIDE(x) a[x].r
#define WIDTH(x) (RSIDE(x)-LSIDE(x)+1)
#define MAXN 1000010
using namespace std;
int n,m;
char ch[MAXN];
struct Segment_Tree{
int seven,four,c,upon,down;
int l,r;
}a[MAXN<<2];
inline int read(){
int date=0,w=1;char c=0;
while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}
while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}
return date*w;
}
inline void pushup(int rt){
FOUR(rt)=FOUR(LSON)+FOUR(RSON);
SEVEN(rt)=SEVEN(LSON)+SEVEN(RSON);
UPON(rt)=max(FOUR(LSON)+SEVEN(RSON),max(FOUR(LSON)+UPON(RSON),UPON(LSON)+SEVEN(RSON)));
DOWN(rt)=max(SEVEN(LSON)+FOUR(RSON),max(SEVEN(LSON)+DOWN(RSON),DOWN(LSON)+FOUR(RSON)));
}
inline void pushdown(int rt){
if(!SIGN(rt)||LSIDE(rt)==RSIDE(rt))return;
SIGN(LSON)^=1;
swap(FOUR(LSON),SEVEN(LSON));
swap(UPON(LSON),DOWN(LSON));
SIGN(RSON)^=1;
swap(FOUR(RSON),SEVEN(RSON));
swap(UPON(RSON),DOWN(RSON));
SIGN(rt)=0;
}
void buildtree(int l,int r,int rt){
LSIDE(rt)=l;RSIDE(rt)=r;SIGN(rt)=0;
if(l==r){
FOUR(rt)=(ch[l]=='4');
SEVEN(rt)=(FOUR(rt)^1);
UPON(rt)=DOWN(rt)=1;
return;
}
int mid=l+r>>1;
buildtree(l,mid,LSON);
buildtree(mid+1,r,RSON);
pushup(rt);
}
void update(int l,int r,int rt){
if(l<=LSIDE(rt)&&RSIDE(rt)<=r){
SIGN(rt)^=1;
swap(FOUR(rt),SEVEN(rt));
swap(UPON(rt),DOWN(rt));
return;
}
pushdown(rt);
int mid=LSIDE(rt)+RSIDE(rt)>>1;
if(l<=mid)update(l,r,LSON);
if(mid<r)update(l,r,RSON);
pushup(rt);
}
void work(){
int l,r;
while(m--){
scanf("%s",ch);
if(ch[0]=='s'){
l=read();r=read();
update(l,r,1);
}
else printf("%d\n",UPON(1));
}
}
void init(){
n=read();m=read();scanf("%s",ch+1);
buildtree(1,n,1);
}
int main(){
init();
work();
return 0;
}
CF145E Lucky Queries的更多相关文章
- 数据结构(线段树):CodeForces 145E Lucky Queries
E. Lucky Queries time limit per test 3 seconds memory limit per test 256 megabytes input standard in ...
- Codeforces 145E Lucky Queries 线段树
Lucky Queries 感觉是很简单的区间合并, 但是好像我写的比较麻烦. #include<bits/stdc++.h> #define LL long long #define f ...
- Codeforces Round #104 (Div. 1)
A.Lucky Conversion 题意 给定两个长度为 \(N(N \le 10^5)\) 且由4和7构成的 \(a, b\)串 对 \(a\) 可以有两种操作: 交换两个位置的字符; 改变一个位 ...
- SPOJ 1557. Can you answer these queries II 线段树
Can you answer these queries II Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://www.spoj.com/pr ...
- spoj gss2 : Can you answer these queries II 离线&&线段树
1557. Can you answer these queries II Problem code: GSS2 Being a completist and a simplist, kid Yang ...
- SPOJ GSS2 - Can you answer these queries II(线段树 区间修改+区间查询)(后缀和)
GSS2 - Can you answer these queries II #tree Being a completist and a simplist, kid Yang Zhe cannot ...
- 实践 HTML5 的 CSS3 Media Queries
先来介绍下 media,确切的说应该是 CSS media queries(CSS 媒体查询),媒体查询包含了一个媒体类型和至少一个使用如宽度.高度和颜色等媒体属性来限制样式表范围的表达式.CSS3 ...
- lucky 的 时光助理(2)
lucky小姐说:昨天晚上他喝醉了,发消息说他想我了,说他后悔了. 我很惊讶. 我问lucky:你们很久都没有联系, 突然说... 你怎么想. 没错,'他'就是lucky的前男友. lucky看着我, ...
- lucky 的 时光助理
2017年的lucky小姐,厌倦了现在的工作,她觉得这些的工作对于她而言不具备挑战性,她在迷茫春节过后该如何选择, 这里是距她走出校门整整一年的时光. lucky小姐从开发走向了实施,目的是想周游这个 ...
随机推荐
- iDempiere的用户密码加密处理(AD_User.Password)(Postgresql 9.1)
怀揣着为中小企业量身定做一整套开源软件解决方案的梦想开始了一个网站的搭建.http://osssme.org/ 首先对Postgresql数据库进行加密处理. 参考网页:francs写的:Postgr ...
- Office-Excel取消掉每次打开弹出的自定义项安装程序弹窗
电脑重装了系统之后,重新安装了office2013,发现每次打开Excel都会弹出一个如下图所示的弹窗,比较烦人. 要取消掉这个弹窗也是比较简单的. 打开“文件”--“选项”--“加载项” 在下面的管 ...
- Linux 脚本点滴知识积累
1.以openwrt中的/etc/hotplug.d/button/00-button为例 . /lib/functions.sh do_button () { local button ---- ...
- windows 下node版管理
linux 下的node 多版本管理有nvm,windows 下同样有这样的工具gnvm 安装步骤(无node环境): 1.下载并解压缩 gnvm.exe 保存到任意文件夹,并将此文件夹加入到环境变量 ...
- CentOS上使用Squid+Stunnel搭建代理服务器教程
这篇文章主要介绍了CentOS上使用Squid+Stunnel搭建代理服务器教程,同时文中也介绍了用户认证的方法,适合于多用户共同使用代理,这种功能在国内用还是比较exciting的~需要的朋友可以参 ...
- html表格上下居中
在表格外面嵌套另一个高度为 100% 的表格,外层的表格设置 td 的 valign 属性 为 middle <table width="100%" height=" ...
- Eclipse 悬浮提示
Eclipse 悬浮提示 使用悬浮提示 java 编辑器中包含了不同类型的悬浮提示,悬浮提示提供了鼠标指针指向元素的额外信息.所有java编辑器中相关的悬浮提示可以通过 preference(首选项) ...
- 转载:DenseNet算法详解
原文连接:http://blog.csdn.net/u014380165/article/details/75142664 参考连接:http://blog.csdn.net/u012938704/a ...
- ios 关于collectionView.performBatchUpdates()方法 --时时更新
今天想实现一个简单的collectionView动画效果,查阅相关资料发现,实现 collectionView.performBatchUpdates()方法即可,于是掉坑里了. 文档: public ...
- java.lang.IllegalArgumentException: Invalid 'log4jConfigLocation 解决办法
MyEclipse 启动tomcat 报错: java.lang.IllegalArgumentException: Invalid 'log4jConfigLocation' parameter: ...