【题解】

  开26棵线段数,记录区间内每种字母的出现次数,修改的时候就用区间设置为一个数操作即可。同时也有平衡树做

 #include<cstdio>
#include<algorithm>
#include<cstring>
#define LL long long
#define rg register
#define N 200010
#define ls (u<<1)
#define rs (u<<1|1)
#define mid ((a[u].l+a[u].r)>>1)
using namespace std;
int n,m,opt,l,r,q[];
struct tree{
int l,r,cnt[],set;
}a[N<<];
inline int read(){
int k=,f=; char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(''<=c&&c<='')k=k*+c-'',c=getchar();
return k*f;
}
void build(int u,int l,int r){
a[u].l=l; a[u].r=r; a[u].set=-;
if(l<r){
build(ls,l,mid); build(rs,mid+,r);
for(rg int i=;i<;i++) a[u].cnt[i]=a[ls].cnt[i]+a[rs].cnt[i];
}
else a[u].cnt[getchar()-'a']++;
}
inline void pushdown(int u){
if(a[u].set==-) return; int set=a[u].set;
for(rg int i=;i<;i++) a[ls].cnt[i]=a[rs].cnt[i]=;
a[ls].cnt[a[ls].set=set]=(a[ls].r-a[ls].l+);
a[rs].cnt[a[rs].set=set]=(a[rs].r-a[rs].l+);
a[u].set=-;
}
void update(int u,int l,int r,int set){
if(l<=a[u].l&&a[u].r<=r){
for(rg int i=;i<;i++) a[u].cnt[i]=;
a[u].cnt[a[u].set=set]=(a[u].r-a[u].l+);
return;
}
pushdown(u);
if(l<=mid) update(ls,l,r,set);
if(r>mid) update(rs,l,r,set);
for(rg int i=;i<;i++) a[u].cnt[i]=a[ls].cnt[i]+a[rs].cnt[i];
}
void query(int u,int l,int r){
if(l<=a[u].l&&a[u].r<=r){
for(rg int i=;i<;i++) q[i]+=a[u].cnt[i];
return;
}
pushdown(u);
if(l<=mid) query(ls,l,r);
if(r>mid) query(rs,l,r);
}
void out(int u,int pos){
if(a[u].l==a[u].r) for(rg int i=;i<;i++)if(a[u].cnt[i]){putchar(i+'a'); return;}
pushdown(u);
if(pos<=mid) out(ls,pos); else out(rs,pos);
}
int main(){
n=read(); m=read(); build(,,n);
while(m--){
memset(q,,sizeof(q));
l=read(); r=read(); opt=read();
query(,l,r); int now=l;
if(opt==){
for(rg int i=;i<;i++)if(q[i]) update(,now,now+q[i]-,i),now+=q[i];
}
else{
for(rg int i=;i>=;i--)if(q[i]) update(,now,now+q[i]-,i),now+=q[i];
}
memset(q,,sizeof(q));
}
for(rg int i=;i<=n;i++) out(,i);
return ;
}

法。

51nod1485 字母排序的更多相关文章

  1. [Android分享] 【转帖】Android ListView的A-Z字母排序和过滤搜索功能

      感谢eoe社区的分享   最近看关于Android实现ListView的功能问题,一直都是小伙伴们关心探讨的Android开发问题之一,今天看到有关ListView实现A-Z字母排序和过滤搜索功能 ...

  2. 联系人的侧边字母索引ListView 将手机通讯录姓名通过首字母排序。

      package com.lixu.letterlistview; import java.util.ArrayList; import java.util.List; import org.apa ...

  3. 获取手机通讯录放入PinnedSectionListView中,按名字首字母排序,并且实现拨打电话功能。

    package com.lixu.tongxunlu; import java.util.ArrayList; import com.lixu.tongxunlu.PinnedSectionListV ...

  4. Android 联系人字母排序(仿微信)

    现在很多APP只要涉及到联系人的界面,几乎都会采取字母排序以及导航的方式.作为程序猿,这种已经普及的需求还是需要学习的,于是小生开始了在网上默默的学习之路,网上学习的资料质量参差不齐,不过也有很不错的 ...

  5. HashMap加入数据后,会自动根据首字母排序

    1.Map<String, ArrayList<XX>> entityHashMap = new HashMap<>(); 然后增加一些数据,会发现根据String ...

  6. Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音

    转载:http://blog.csdn.net/xiaanming/article/details/12684155 转载请注明出处:http://blog.csdn.net/xiaanming/ar ...

  7. mysql中文名字按首字母排序

    在mysql数据库中可以使用GBK编码对中文进行排序,如名字按首字母排序 order by convert(substr(tu.username,1,1) using 'GBK') 其中substr方 ...

  8. string字母排序,

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. php按照中文首字母排序

    1> 网络上很多php的工具类可以将汉字转为拼音: 2> 将拼音进行排序即可 另一种则是类似mysql转码方式: 1 foreach ($array as $key=>$value) ...

随机推荐

  1. [USACO17DEC]Push a Box

    https://www.zybuluo.com/ysner/note/1293166 题面 戳我 解析 挺不错的一道图论码量题. 可以借此回顾一下\(noip2013\)华容道. 思路和华容道差不多. ...

  2. POJ1584 A Round Peg in a Ground Hole 凸包判断 圆和凸包的关系

    POJ1584 题意:给定n条边首尾相连对应的n个点 判断构成的图形是不是凸多边形 然后给一个圆 判断圆是否完全在凸包内(相切也算) 思路:首先运用叉积判断凸多边形 相邻三条边叉积符号相异则必有凹陷 ...

  3. 编译Ruby2.0 问题解决

    compiling readline.creadline.c: In function ‘Init_readline’:readline.c:1886:26: error: ‘Function’ un ...

  4. 提交图片base64格式问题

    提交图片base64格式给后台,一定把data:image/png;base64,去掉,不然提交后后台返回的图片URL打开是一个破坏的图片.使用split("base64,")[1 ...

  5. SSM整合配置错误记录

    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dic ...

  6. Winform执行CMD命令

    1.首先分享CmdHelper类: using System; using System.Collections.Generic; using System.Text; using System.Di ...

  7. EditText(1)EditText的类型和回车键的行为

    1,常见类型 <EditText android:id="@+id/email_address" android:layout_width="fill_parent ...

  8. 视图解析器InternalResourceViewResolver在什么情况下需要配置?在什么情况下不需要配置?

    如果路径名是逻辑名的话,必须配置 -------------- 相对路径,即逻辑名称如果路径名是真实名的话,可选配置 若是绝对路径,则不用配置,即真实名称 注:试一下逻辑名和真实名的例子*****有用 ...

  9. Windows 7上安装Microsoft Loopback Adapter(微软环回网卡)

    Oracle 安装过程中,先决条件检查遇到如下错误: 正在检查网络配置要求...  检查完成.此次检查的总体结果为: 失败 <<<<  问题: 安装检测到系统的主 IP 地址是 ...

  10. 237 Delete Node in a Linked List 删除链表的结点

    编写一个函数,在给定单链表一个结点(非尾结点)的情况下,删除该结点. 假设该链表为1 -> 2 -> 3 -> 4 并且给定你链表中第三个值为3的节点,在调用你的函数后,该链表应变为 ...