题目链接

  这题……太暴力了吧……

  开二十六棵线段树维护l到r字符i出现的次数,然后修改的时候暴力修改,输出的时候暴力输出……就过了……

  然后我还没想到……

  qwq

  

#include<cstdio>
#include<cstring>
#include<cctype>
#include<cstdlib>
#include<algorithm>
#define maxn 100050
#define left (rt<<1)
#define right (rt<<1|1)
#define mid ((l+r)>>1)
#define lson l,mid,left
#define rson mid+1,r,right
using namespace std; inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} inline int count(char c){ return c-'a'+; } char q[maxn]; struct Segtree{
int tree[maxn*];
int tag[maxn*];
int mem[maxn*];
inline void pushup(int rt){
tree[rt]=tree[left]+tree[right];
}
void build(int l,int r,int rt,int o){
tree[rt]=tag[rt]=; mem[rt]=-;
if(l==r){
tree[rt]=count(q[l])==o?:;
return;
}
build(lson,o);
build(rson,o);
pushup(rt);
return;
}
void pushdown(int rt,int m){
if(tag[rt]==&&mem[rt]==-) return;
if(mem[rt]!=-){
mem[left]=mem[right]=mem[rt];
tag[left]=tag[right]=;
tree[left]=mem[rt]*(m-(m>>));
tree[right]=mem[rt]*(m>>);
mem[rt]=-;
}
if(tag[rt]){
tag[left]+=tag[rt];
tag[right]+=tag[rt];
tree[left]+=tag[rt]*(m-(m>>));
tree[right]+=tag[rt]*(m>>);
tag[rt]=;
}
}
void update(int from,int to,int num,int l,int r,int rt){
if(from<=l&&to>=r){
tree[rt]+=num*(r-l+);
tag[rt]=num;
return;
}
pushdown(rt,r-l+);
if(from<=mid) update(from,to,num,lson);
if(to>mid) update(from,to,num,rson);
pushup(rt);
return;
}
void memseg(int from,int to,int l,int r,int rt){
if(from<=l&&to>=r){
tree[rt]=;
mem[rt]=; tag[rt]=;
return;
}
pushdown(rt,r-l+);
if(from<=mid) memseg(from,to,lson);
if(to>mid) memseg(from,to,rson);
pushup(rt);
return;
}
int query(int from,int to,int l,int r,int rt){
if(from<=l&&to>=r) return tree[rt];
pushdown(rt,r-l+);
int ans=;
if(from<=mid) ans+=query(from,to,lson);
if(to>mid) ans+=query(from,to,rson);
return ans;
}
}s[]; int d[]; int main(){
int n=read(),m=read();
scanf("%s",q+);
for(int i=;i<=;++i) s[i].build(,n,,i);
while(m--){
int from=read(),to=read(),opt=read();
for(int i=;i<=;++i){
d[i]=s[i].query(from,to,,n,);
s[i].memseg(from,to,,n,);
}
if(opt){
int pos=from;
for(int i=;i<=;++i){
if(d[i]==) continue;
s[i].update(pos,pos+d[i]-,,,n,);
pos+=d[i];
}
}
else{
int pos=to;
for(int i=;i<=;++i){
if(d[i]==) continue;
s[i].update(pos-d[i]+,pos,,,n,);
pos-=d[i];
}
}
}
for(int i=;i<=n;++i)
for(int j=;j<=;++j)
if(s[j].query(i,i,,n,)==){
printf("%c",j+'a'-);
break;
}
return ;
}

https://vjudge.net/problem/CodeForces-558E

【Vjudge】P558E A Simple Task(线段树暴力)的更多相关文章

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

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

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

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

  5. [Codeforces558E]A Simple Task 线段树

    链接 题意:给定一个长度不超过 \(10^5\) 的字符串(小写英文字母),和不超过5000个操作. 每个操作 L R K 表示给区间[L,R]的字符串排序,K=1为升序,K=0为降序. 最后输出最终 ...

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

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

  7. CF #312 E. A Simple Task 线段树

    题目链接:http://codeforces.com/problemset/problem/558/E 给一个字符串,每次对一个区间内的子串进行升序或者降序的排列,问最后字符串什么样子. 对于字符串排 ...

  8. CF558E A simple task 线段树

    这道题好猥琐啊啊啊啊啊啊 写了一个上午啊啊啊啊 没有在update里写pushup啊啊啊啊 题目大意: 给你一个字符串s,有q个操作 l r 1 :把sl..rsl..r按升序排序 l r 0 :把s ...

  9. codeforces 558E A Simple Task 线段树

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

随机推荐

  1. ABAP的Package interface, 安卓的manifest.xml和Kubernetes的Capabilities

    ABAP 事务码SE21创建ABAP包接口.这是ABAP基于包层面的访问控制实现逻辑.包里可以存储很多ABAP对象.如果开发人员想将某些对象声明为包外程序也能访问,可以将这些对象放在包接口的Visib ...

  2. Windows无法停用设备,原因是某个程序正在使用它...

    有时候,当我们用完U盘需要弹出是,会出现“Windows无法停用设备,原因是某个程序正在使用它…”的黄色警告,很无奈.不过可以通过一些方法进行解决(win10版): 1. 打开“文件资源管理器”,选择 ...

  3. Connectivity

    6492: Connectivity 时间限制: 1 Sec  内存限制: 128 MB提交: 118  解决: 28[提交][状态][讨论版][命题人:admin] 题目描述 There are N ...

  4. 2018.4.1 Ubuntu16.04 下配置Tomcat服务器以及设置dingshi启动

    Tomcat自启动的设置技巧 以root用户登录系统: cd /etc/rc.d/init.d/ vi tomcat #!/bin/sh # # tomcat: Start/Stop/Restart ...

  5. Java中的集合Collection接口

    /* 集合:集合是存储对象数据的集合容器.集合比数组的优势: 1. 集合可以存储任意类型的对象数据,数组只能存储同一种数据类型 的数据. 2. 集合的长度是会发生变化的,数组的长度是固定的.----- ...

  6. 将unity3d项目嵌入到Android App中使用

    创建一个新的AndroidStudio app项目. 1.添加库文件:拷贝unity安装目录下的库文件:Unity\Editor\Data\PlaybackEngines\AndroidPlayer\ ...

  7. Yii2应用的运行过程

    每一个框架都有一个入口脚本,Yii2也不例外.一般来说,对于Web应用的入口脚本是YiiBasePath/frontend/web目录下的index.php. 先观察这个文件: <?php de ...

  8. Struts2和SpringMVC简单配置以及区别总结

    Struts2: struts 2 是一个基于MVC(mode-view-con)设计模式的Web应用框架,是由Struts1和WebWork两个经典框架发展而来的. 工作流程: 1客户端浏览器发出H ...

  9. 传智 Python基础班+就业班+课件 【最新完整无加密视频课程】

    点击了解更多Python课程>>> 传智 Python基础班+就业班+课件 [最新完整无加密视频课程] 直接课程目录 python基础 linux操作系统基础) 1-Linux以及命 ...

  10. Lecture 3

    surface models 1. The two main methods of creating surface models are interpolation and triangulatio ...