cf A Simple Task---线段树
Examples
10 5
abacdabcda
7 10 0
5 8 1
1 4 0
3 6 0
7 10 1
cbcaaaabdd
10 1
agjucbvdfk
1 10 1
abcdfgjkuv
题意:给定一个字符串,长度为n,q次操作,对于每次操作,但flag为1时,l——r为非减序列,当flag为0时,l——r为非增序列。
输出q次操作后的字符串。
思路:考虑记数排序,这样时间复杂度为26nlogn。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
#define M 100000+10 int bj[M],k[M],sum[*M],lazy[*M];
char s[M];
char z[M];
struct node
{
int l,r,flag;
} b[M];
void build(int i,int l,int r)//建树
{
lazy[i]=-;
if(l==r)
{
sum[i]=k[l];
return ;
}
int mid=(l+r)>>;
build(i*,l,mid);
build(+i*,mid+,r);
sum[i]=sum[i*]+sum[+i*];
}
void pushdown(int i,int l,int r)//lazy下推
{
if(lazy[i]==-)
return ;
int mid=(l+r)>>;
lazy[i*]=lazy[+i*]=lazy[i];
sum[i*]=(mid-l+)*lazy[i];
sum[+i*]=(r-mid)*lazy[i];
lazy[i]=-;
return ;
} int query1(int i,int l,int r,int x,int y)//查询区间和
{
if(l>=x&&r<=y)
{
return sum[i];
}
pushdown(i,l,r);
int mid=(l+r)>>;
int ans=;
if(mid>=x)ans+=query1(i*,l,mid,x,y);
if(mid<y)ans+=query1(i*+,mid+,r,x,y);
sum[i]=sum[i*]+sum[+i*];
return ans;
}
void add(int i,int l,int r,int x,int y,int num)//修改区间
{
if(l>=x&&r<=y)
{
lazy[i]=num;
sum[i]=(r-l+)*num;
return;
}
int mid=(l+r)>>;
pushdown(i,l,r);
if(mid>=x)add(i*,l,mid,x,y,num);
if(mid<y)add(+i*,mid+,r,x,y,num);
sum[i]=sum[i*]+sum[i*+];
} int main()
{ int n,q;
cin>>n>>q;
for(int i=; i<=n; i++)
z[i]='/';
scanf("%s",s+);
for(int i=; i<q; i++)
cin>>b[i].l>>b[i].r>>b[i].flag;
for(int i=; i<; i++) //分别对a,b,c,....z排序
{
char x='a'+i;
for(int j=; j<=n; j++)
if(x==s[j])
bj[j]=;
for(int j=; j<=n; j++)
k[j]=bj[j];
memset(sum,,sizeof(sum));
build(,,n);
for(int j=; j<q; j++)
{
int num=query1(,,n,b[j].l,b[j].r);
if(b[j].flag==)
{
if(num!=)
add(,,n,b[j].l,b[j].l+num-,);
if(b[j].r-b[j].l+!=num)
add(,,n,b[j].l+num,b[j].r,);
}
else
{
if(num!=)
add(,,n,b[j].r-num+,b[j].r,);
if(b[j].r-b[j].l+!=num)
add(,,n,b[j].l,b[j].r-num,);
}
}
for(int j=; j<=n; j++)
{
int x1=query1(,,n,j,j);
if(x1==)
if(z[j]=='/')
z[j]='a'+i;
}
}
for(int i=; i<=n; i++)
printf("%c",z[i]);
puts("");
return ;
}
cf A Simple Task---线段树的更多相关文章
- CF #312 E. A Simple Task 线段树
题目链接:http://codeforces.com/problemset/problem/558/E 给一个字符串,每次对一个区间内的子串进行升序或者降序的排列,问最后字符串什么样子. 对于字符串排 ...
- 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 ...
- CodeForces 588E A Simple Task(线段树)
This task is very simple. Given a string S of length n and q queries each query is on the format i j ...
- 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 ...
- Codeforces 588E. A Simple Task (线段树+计数排序思想)
题目链接:http://codeforces.com/contest/558/problem/E 题意:有一串字符串,有两个操作:1操作是将l到r的字符串升序排序,0操作是降序排序. 题解:建立26棵 ...
- CF558E A simple task 线段树
这道题好猥琐啊啊啊啊啊啊 写了一个上午啊啊啊啊 没有在update里写pushup啊啊啊啊 题目大意: 给你一个字符串s,有q个操作 l r 1 :把sl..rsl..r按升序排序 l r 0 :把s ...
- codeforces 558E A Simple Task 线段树
题目链接 题意较为简单. 思路: 由于仅仅有26个字母,所以用26棵线段树维护就好了,比較easy. #include <iostream> #include <string> ...
- [Codeforces558E]A Simple Task 线段树
链接 题意:给定一个长度不超过 \(10^5\) 的字符串(小写英文字母),和不超过5000个操作. 每个操作 L R K 表示给区间[L,R]的字符串排序,K=1为升序,K=0为降序. 最后输出最终 ...
- CF 1023D Array Restoration - 线段树
题解 非常容易想到的线段树, 还可以用并查集来. 还有一位大神用了$O(n)$ 就过了Orz 要判断是否能染色出输入给出的序列,必须满足两个条件: 1. 序列中必须存在一个$q$ 2. 两个相同的数$ ...
随机推荐
- 使用npm私有服务器保存公司内部强业务类型组件(一):npm私有服务器搭建
1:安装centOS虚拟机 2:安装完成虚拟机后完成后开启系统网卡: 进入到/etc/sysconfig/network-scprits/ 打开ifcfg-ens33文件 找到 ONBOOT=NO 改 ...
- Jieba库使用和好玩的词云
jieba库的使用: (1) jieba库是一款优秀的 Python 第三方中文分词库,jieba 支持三种分词模式:精确模式.全模式和搜索引擎模式,下面是三种模式的特点. 精确模式:试图将语句最精 ...
- mysql修改当前用户的密码
ALTER USER USER() IDENTIFIED BY '123456';https://majing.io/posts/10000005531181
- 缓存之Memcache
Memcache Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度. ...
- mysql 查询正在执行的进程-亲试ok
命令:show processlist 每一列的含义和用途: 第一列 id,不用说了吧,一个标识,你要kill一个语句的时候很有用. 第二列 user列,显示单前用户,如果不是root,这个命令就只显 ...
- .NET+MySql 踩坑1
换成MySql数据库后,遇到的问题: 已解决,但不理解的问题: var test = db.test; 报如下图错误: 加上DefaultIfEmpty()则解决. var test = db.Tes ...
- 数据结构与算法之PHP递归函数
一.递归函数的定义 递归函数即自调用函数,在函数体内部直接或者间接的自己调用自己,即函数的嵌套调用是函数本身. 通常在此类型的函数题中会附加一个条件判断叙述,以判断是否需要执行递归调用,并且在特定的条 ...
- vue-详情列表偷懒遍历
假如数据格式是这样的: 文案的字段名和数据的字段名完全对应,我们在处理数据的时候,就可以用: 完美:
- [luogu P3953] [noip2017 d1t3] 逛公园
[luogu P3953] [noip2017 d1t3] 逛公园 题目描述 策策同学特别喜欢逛公园.公园可以看成一张$N$个点$M$条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,$N ...
- bash: ./xxx 权限不够
Linux环境下要运行C编译的一个可执行文件play,终端cd到当前目录后输入./play,提示 bash: ./xxx 权限不够 用sudo, 提示 sudo:./play: command no ...