题意:给定一个字符串,以及m次操作,每次操作对字符串的一个子区间进行升序或降序排序,求m次操作后的串

考虑桶排,发现线段树可以模拟桶排的过程,所以对26个字母分别建立线段树即可

#include<bits/stdc++.h>
using namespace std;
#define MAXN 1000000+10
struct tree{int sum,tag;}tr[MAXN*][];
char s[MAXN];
int n,m,cnt[];
void pushup(int k,int x){tr[k][x].sum=tr[k<<][x].sum+tr[k<<|][x].sum;}
void pushdown(int k,int x,int l,int r){
int mid=(l+r)>>;
if(tr[k][x].tag==){
tr[k<<][x].sum=(mid-l+);tr[k<<|][x].sum=(r-mid);
tr[k<<][x].tag=tr[k<<|][x].tag=;
tr[k][x].tag=;
}
else if(tr[k][x].tag==){
tr[k<<][x].sum=tr[k<<|][x].sum=;
tr[k<<][x].tag=tr[k<<|][x].tag=;
tr[k][x].tag=;
}
}
void build(int k,int l,int r,int x){
tr[k][x].tag=;
if(l==r){
tr[k][x].sum=;
return;
}
int mid=(l+r)>>;
build(k<<,l,mid,x);
build(k<<|,mid+,r,x);
pushup(k,x);
}
void update(int k,int l,int r,int L,int R,int val,int x){
if(l>=L&&r<=R){
if(val==)tr[k][x].sum=r-l+;
else tr[k][x].sum=;
tr[k][x].tag=val;
return;
}
pushdown(k,x,l,r);
int mid=(l+r)>>;
if(R<=mid)update(k<<,l,mid,L,R,val,x);
else if(L>mid)update(k<<|,mid+,r,L,R,val,x);
else update(k<<,l,mid,L,R,val,x),update(k<<|,mid+,r,L,R,val,x);
pushup(k,x);
}
int query(int k,int l,int r,int L,int R,int x){
if(l>=L&&r<=R)return tr[k][x].sum;
pushdown(k,x,l,r);
int mid=(l+r)>>;
if(R<=mid)return query(k<<,l,mid,L,R,x);
else if(L>mid)return query(k<<|,mid+,r,L,R,x);
else return query(k<<,l,mid,L,R,x)+query(k<<|,mid+,r,L,R,x);
pushup(k,x);
}
int main(){
scanf("%d%d",&n,&m);
scanf("%s",s+);
for(int i=;i<;i++)build(,,n,i);
for(int i=;i<=n;i++)update(,,n,i,i,,s[i]-'a');
while(m--){
memset(cnt,,sizeof(cnt));
int l,r,x;
scanf("%d%d%d",&l,&r,&x);
for(int i=;i<;i++){
cnt[i]=query(,,n,l,r,i);
update(,,n,l,r,,i);
}
if(x){
int p=l;
for(int i=;i<;i++){
if(cnt[i])update(,,n,p,p+cnt[i]-,,i);
p+=cnt[i];
}
}
else{
int p=l;
for(int i=;i>=;i--){
if(cnt[i])update(,,n,p,p+cnt[i]-,,i);
p+=cnt[i];
}
}
}
for(int i=;i<=n;i++){
for(int k=;k<;k++)
if(query(,,n,i,i,k)){
putchar((char)k+'a');
break;
}
}
return ;
}

Codeforces 558E A Simple Task的更多相关文章

  1. 计数排序 + 线段树优化 --- Codeforces 558E : A Simple Task

    E. A Simple Task Problem's Link: http://codeforces.com/problemset/problem/558/E Mean: 给定一个字符串,有q次操作, ...

  2. Codeforces 558E A Simple Task (计数排序&&线段树优化)

    题目链接:http://codeforces.com/contest/558/problem/E E. A Simple Task time limit per test5 seconds memor ...

  3. Codeforces 558E A Simple Task(权值线段树)

    题目链接  A Simple Task 题意  给出一个小写字母序列和若干操作.每个操作为对给定区间进行升序排序或降序排序. 考虑权值线段树. 建立26棵权值线段树.每次操作的时候先把26棵线段树上的 ...

  4. Codeforces 558E A Simple Task(计数排序+线段树优化)

    http://codeforces.com/problemset/problem/558/E Examples input 1 abacdabcda output 1 cbcaaaabdd input ...

  5. codeforces 558E A Simple Task 线段树

    题目链接 题意较为简单. 思路: 由于仅仅有26个字母,所以用26棵线段树维护就好了,比較easy. #include <iostream> #include <string> ...

  6. Codeforces C. A Simple Task(状态压缩dp)

    题目描述:  A Simple Task time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  7. 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 ...

  8. Codeforces J. A Simple Task(多棵线段树)

    题目描述: Description This task is very simple. Given a string S of length n and q queries each query is ...

  9. Codeforces 588E. A Simple Task (线段树+计数排序思想)

    题目链接:http://codeforces.com/contest/558/problem/E 题意:有一串字符串,有两个操作:1操作是将l到r的字符串升序排序,0操作是降序排序. 题解:建立26棵 ...

随机推荐

  1. IIS下自定义错误页面配置的两种方式(亲测可行)--IIS服务器

    网站自定义错误页面的设置,大家应该都知道它的重要性……不多说,下面带大家一步步在IIS下设置网站自定义错误页面…… 1.首先进入你的网站主页,找到[错误页](注意是IIS下的错误页不是.NET错误页) ...

  2. 哈尔滨理工大学第六届程序设计团队 E-Mod

    /* 成功水过,哈哈哈,可能数据水吧 */ #include <stdio.h> #include <algorithm> #include <string.h> ...

  3. jQuery基础应用

    什么是 jQuery ? jQuery是一个JavaScript函数库. jQuery是一个轻量级的"写的少,做的多"的JavaScript库. jQuery库包含以下功能: HT ...

  4. oracle导入TYPE对象报错ORA-02304

    Type是我们经常使用的数据库对象结构.我们在实际中,可以单独定义type类型,之后在PL/SQL代码或者数据表中使用. 在一个偶然的机会让笔者发现使用Type类型在数据exp/imp中的麻烦.当我们 ...

  5. 强大又简单的响应式框架——Foundation 网格系统

          前端框架——Foundation     简介 Foundation 用于开发响应式的 HTML, CSS and JavaScript 框架. Foundation 是一个易用.强大而且 ...

  6. 【深度学习笔记】(二)基于MNIST数据集的神经网络实验

    一.介绍 MNIST(Mixed National Institute of Standards and Technology database)是网上著名的公开数据库之一,是一个入门级的计算机视觉数 ...

  7. C# 可空引用类型

    可空引用类型是C#8.0计划新增的一个功能,不过已经发布了预览版本,今天我们来体验一下可空引用类型. 安装 您必须下载Visual Studio 2017 15.5预览版(目前最新发布版本是15.4) ...

  8. Dubbo源码学习--环境搭建及基础准备(ServiceLoader、ExtensionLoader)

    环境搭建 Github上下载Dubbo最新发布版本,楼主下载版本为2.5.7. cd到源码解压目录,maven编译,命令为: mvn clean install -Dmaven.test.skip 生 ...

  9. fragmentTabHost 使用示例

    目前我们看微信的底部,有四个导航栏,那我们应该来怎么实现类似的导航栏呢? 在 android 4.0 的时候,推出了一个新的工具,fragmentTabHost . fragmentTabHost  ...

  10. 原生JS—实现图片循环切换的两种方法

    今天我们主要讲讲如何使用原生JS实现图片的循环切换的方法.多余的话我们就不多说了,我们一个一个开始讲吧. 1  原生JS实现图片循环切换 -- 方法一 在上栗子之前我们先简单介绍一下所用的一些知识点. ...