B - A Simple Task
https://vjudge.net/contest/446582#problem/B
这道题是一道不错的线段树练代码能力的题。
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
char s[N];
int a[N];
struct segmentree {
int l,r,cnt[27],lazy[27];
}T[N];
void Push_up(int x) {
for(int i=0;i<26;i++)T[x].cnt[i]=T[x*2].cnt[i]+T[x*2+1].cnt[i];
}
void Build_tree(int x,int l,int r) {
T[x].l=l,T[x].r=r;
for(int i=0;i<26;i++) T[x].cnt[i]=0,T[x].lazy[i]=-1;
if(l==r) {T[x].cnt[a[l]]++;return;}
int mid=(T[x].l+T[x].r)>>1;
Build_tree(x*2,l,mid),Build_tree(x*2+1,mid+1,r);
Push_up(x);
}
void Push_down(int x) {
for(int i=0;i<26;i++) {
if(T[x].lazy[i]==0) T[x*2].cnt[i]=T[x*2+1].cnt[i]=T[x*2].lazy[i]=T[x*2+1].lazy[i]=0;
if(T[x].lazy[i]==1) {
T[x*2].cnt[i]=T[x*2].r-T[x*2].l+1,T[x*2].lazy[i]=1;
T[x*2+1].cnt[i]=T[x*2+1].r-T[x*2+1].l+1,T[x*2+1].lazy[i]=1;
}
}
for(int i=0;i<26;i++) T[x].lazy[i]=-1;
}
void Update(int x,int l,int r,int p) { //[l,r]->p
if(l<=T[x].l&&T[x].r<=r) {
for(int i=0;i<26;i++)T[x].cnt[i]=T[x].lazy[i]=0;
T[x].cnt[p]=T[x].r-T[x].l+1,T[x].lazy[p]=1;
return;
}
Push_down(x);
int mid=(T[x].l+T[x].r)>>1;
if(l<=mid)Update(x*2,l,r,p);
if(r>mid)Update(x*2+1,l,r,p);
Push_up(x);
}
int get_cnt(int x,int l,int r,int p) {
if(l<=T[x].l&&T[x].r<=r) return T[x].cnt[p];
Push_down(x);
int sum=0,mid=(T[x].l+T[x].r)>>1;
if(l<=mid)sum+=get_cnt(x*2,l,r,p);
if(r>mid)sum+=get_cnt(x*2+1,l,r,p);
return sum;
}
int Cnt[27];
int main() {
int n,q;
scanf("%d%d",&n,&q);
scanf("%s",s);
for(int i=1;i<=n;i++)a[i]=s[i-1]-'a';
Build_tree(1,1,n);
while(q--) {
int x,y,k;
scanf("%d%d%d",&x,&y,&k);
if(!k) {
for(int i=0;i<26;i++) Cnt[i]=get_cnt(1,x,y,i);
int L=x,R;
for(int i=25;i>=0;i--) {
if(!Cnt[i])continue;
R=L+Cnt[i]-1;
Update(1,L,R,i);
L=R+1;
}
}
else {
for(int i=0;i<26;i++) Cnt[i]=get_cnt(1,x,y,i);
int L=x,R;
for(int i=0;i<26;i++) {
if(!Cnt[i])continue;
R=L+Cnt[i]-1;
Update(1,L,R,i);
L=R+1;
}
}
}
for(int i=1;i<=n;i++) {
for(int j=0;j<26;j++) {
if(get_cnt(1,i,i,j)) {
printf("%c",(char)('a'+j));break;
}
}
}
return 0;
}
B - A Simple Task的更多相关文章
- 计数排序 + 线段树优化 --- Codeforces 558E : A Simple Task
E. A Simple Task Problem's Link: http://codeforces.com/problemset/problem/558/E Mean: 给定一个字符串,有q次操作, ...
- HDU-1339 A Simple Task
http://acm.hdu.edu.cn/showproblem.php?pid=1339 正常做法超时,要有点小技巧存在. A Simple Task Time Limit: 2000/1000 ...
- A Simple Task
A Simple Task Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- Codeforces 558E A Simple Task (计数排序&&线段树优化)
题目链接:http://codeforces.com/contest/558/problem/E E. A Simple Task time limit per test5 seconds memor ...
- Codeforces Round #312 (Div. 2) E. A Simple Task 线段树
E. A Simple Task 题目连接: http://www.codeforces.com/contest/558/problem/E Description This task is very ...
- Codeforces Round #312 (Div. 2) E. A Simple Task 线段树+计数排序
题目链接: http://codeforces.com/problemset/problem/558/E E. A Simple Task time limit per test5 secondsme ...
- 【题解】 CF11D A Simple Task
[题解] CF11D A Simple Task 传送门 \(n \le 20\) 考虑状态压缩\(dp\). 考虑状态,\(dp(i,j,O)\)表示从\(i\)到\(j\)经过点集\(O\)的路径 ...
- Codeforces 558E A Simple Task(权值线段树)
题目链接 A Simple Task 题意 给出一个小写字母序列和若干操作.每个操作为对给定区间进行升序排序或降序排序. 考虑权值线段树. 建立26棵权值线段树.每次操作的时候先把26棵线段树上的 ...
- A Simple Task CodeForces - 11D
A Simple Task CodeForces - 11D 题意:输出一个无向图的简单环数量.简单环指无重复边的环.保证图无重边自环. ans[i][j]表示"包含i中的点,以i中第一个点 ...
- Codeforces Round #312 (Div. 2) E. A Simple Task 线段树 延时标记
E. A Simple Task time limit per test5 seconds memory limit per test512 megabytes inputstandard input ...
随机推荐
- ES6-11学习笔记--扩展运算符与rest参数
1.符号都是使用:... 2.扩展运算符:把数组或者类数组展开成用逗号隔开的值 3.rest参数:把逗号隔开的值组合成一个数组 扩展运算符: function foo(a, b, c) { con ...
- 【Android开发】【第三方SDK】蒲公英摇一摇
摇一摇用户信息反馈功能:用户通过摇晃手机或者触发按钮,弹出反馈信息界面,填写个人意见,上传服务器的功能. 1. 蒲公英官网注册应用,获取AppId作为唯一标识: 2. 下载sdk,获取pgyer_sd ...
- IDEA中Tomcat找不到war包导出按钮解决办法
解决办法 (1) 打开Idea,点击File,然后点击Project Structure-,进入项目结构 (2) 具体步骤看下图: (3) 具体步骤如下图: (4) 具体步骤如下图: (5) 问题解决 ...
- python---复杂度、斐波那切数列、汉诺塔
时间复杂度 用来估计算法运行时间的一个式子. 一般来说, 时间复杂度高的算法比复杂度低的算法慢. 常见的时间复杂度: O(1) < O(logn) < O(n) < O( ...
- mysql-cluster-gpl-7.5.10-linux-glibc2.12-x86_64.tar.gz (有必要解释一下)
大部分软件我们接触的时候会发现,起的名称有点怪异,所以我觉得有必要解释一下. 比如: mysql-cluster-gpl-7.5.10-linux-glibc2.12-x86_64.tar.gz 名称 ...
- 2021.12.16 eleveni的刷题记录
2021.12.16 eleveni的刷题记录 1. 数论 https://www.luogu.com.cn/problem/P2532 1.1卡特兰数 https://www.luogu.com.c ...
- Python技能树及CSDN MarkDown编辑器测评
测评目录 python技能树测评 python技能树是什么 python技能树长什么样 如何学习python技能树 python技能树可能需要的改进 对python技能树的总结 CSDN MarkDo ...
- Ubuntu 下 Mariadb 数据库的安装和目录迁移
Ubuntu 下 Mariadb 数据库的安装和目录迁移 1.简介 本文主要是 Ubuntu 下 Mariadb 数据库的安装和目录迁移,同样适用于 Debian 系统:Ubuntu 20.0.4 M ...
- OrchardCore Headless建站拾遗
书接上回,OrchardCore的基本设置写了,但是有一说一,这个东西还是挺复杂的,如果需要构建一个简单的企业网站,还需要干点别的活. 本文考虑在尽量少编程的基础上,完成一个Headless网站的设置 ...
- ThreadLocal的原理及产生的问题
点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. ThreadLocal的原理 特点 ThreadLocal和Sychro ...