题目链接

  这题……太暴力了吧……

  开二十六棵线段树维护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=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')    f=-1;ch=getchar();}while(isdigit(ch)){num=num*10+ch-'0';ch=getchar();}return num*f;
}inline int count(char c){    return c-'a'+1;    }char q[maxn];struct Segtree{int tree[maxn*5];int tag[maxn*5];int mem[maxn*5];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]=0;    mem[rt]=-1;if(l==r){tree[rt]=count(q[l])==o?1:0;return;}build(lson,o);build(rson,o);pushup(rt);return;}void pushdown(int rt,int m){if(tag[rt]==0&&mem[rt]==-1)    return;if(mem[rt]!=-1){mem[left]=mem[right]=mem[rt];tag[left]=tag[right]=0;tree[left]=mem[rt]*(m-(m>>1));tree[right]=mem[rt]*(m>>1);mem[rt]=-1;}if(tag[rt]){tag[left]+=tag[rt];tag[right]+=tag[rt];tree[left]+=tag[rt]*(m-(m>>1));tree[right]+=tag[rt]*(m>>1);tag[rt]=0;}}void update(int from,int to,int num,int l,int r,int rt){if(from<=l&&to>=r){tree[rt]+=num*(r-l+1);tag[rt]=num;return;}pushdown(rt,r-l+1);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]=0;mem[rt]=0;    tag[rt]=0;return;}pushdown(rt,r-l+1);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+1);int ans=0;if(from<=mid)    ans+=query(from,to,lson);if(to>mid)        ans+=query(from,to,rson);return ans;}
}s[28];int d[28];int main(){int n=read(),m=read();scanf("%s",q+1);for(int i=1;i<=26;++i)    s[i].build(1,n,1,i);while(m--){int from=read(),to=read(),opt=read();for(int i=1;i<=26;++i){d[i]=s[i].query(from,to,1,n,1);s[i].memseg(from,to,1,n,1);}if(opt){int pos=from;for(int i=1;i<=26;++i){if(d[i]==0)    continue;s[i].update(pos,pos+d[i]-1,1,1,n,1);pos+=d[i];}}else{int pos=to;for(int i=1;i<=26;++i){if(d[i]==0)    continue;s[i].update(pos-d[i]+1,pos,1,1,n,1);pos-=d[i];}}}for(int i=1;i<=n;++i)for(int j=1;j<=26;++j)if(s[j].query(i,i,1,n,1)==1){printf("%c",j+'a'-1);break;}return 0;
}

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

转载于:https://www.cnblogs.com/cellular-automaton/p/8334905.html

【Vjudge】P558E A Simple Task(线段树暴力)相关推荐

  1. CF558E A Simple Task 线段树

    题解: 这种题之前做过一个类似的题目,也是关于选择区间然后给区间进行排序. 这种题用线段树把排序转换成区间修改区间求和即可. 类似的题目:https://vjudge.net/problem/HDU- ...

  2. codeforces 558E A Simple Task 线段树

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

  3. CodeForces - 731D 80-th Level Archeology(线段树+暴力/差分)

    题目链接:点击查看 题目大意:给出 n 个数列,再给出一个模数 mod,每次操作可以将所有的数字进行:x = x %mod + 1 操作,问至少进行多少次操作,才能使得 n 个数列按照字典序非降序排列 ...

  4. HDU-3974 Assign the task 线段树 或 直接模拟多叉树 或 并查集 (三种方法)

    题目大意 t 组数据(t<=10),每组第一行一个 n 表示 n 个员工(n<=5e4),接下来 n-1 行,每行两个整数 u,v 表示 v 是 u 的上司 然后一行 m 表示有 m 个操 ...

  5. Codeforces Round #723 (Div. 2) D. Kill Anton 线段树 + 暴力

    传送门 文章目录 题意: 思路: 题意: 给你一个只有ANTOANTOANTO四个字母的字符串,你每次可以交换相邻两个,花费为111,让后让你打乱字符串,使得将打乱的字符串还原为原来的字符串的花费最小 ...

  6. HDU - 3974 Assign the task (线段树 + dfs序)

    HDU - 3974 题意:有个公司有一些关系,每个人(除了boss)都有且仅有一个上司,这就是一棵树的关系,然后会有一些操作,C i,询问第i个人现在的任务,T x y,把y任务给x, 给x相当于给 ...

  7. CodeForces - 160D Edges in MST(思维+tarjan/树链剖分+线段树)

    题目链接:点击查看 题目大意:给出一张 n 个点 m 条边组成的带权无向图,现在对于每条边来说,确定一下其分类: 一定是最小生成树上的边 可能是最小生成树上的边 一定不是最小生成树的边 题目分析:两种 ...

  8. 数据结构之线段树合并——永无乡,Lomsat gelral,Tree Rotations,Tree Rotations Escape Through Leaf

    文章目录 [HNOI2012]永无乡 Lomsat gelral 「POI2011 R2 Day2」旋转树木 Tree Rotations Escape Through Leaf 线段树合并与 fhq ...

  9. YbtOJ#752-最优分组【笛卡尔树,线段树】

    正题 题目链接:http://www.ybtoj.com.cn/problem/752 题目大意 nnn个人,每个人有cic_ici​和did_idi​分别表示这个人所在的队伍的最少/最多人数. 然后 ...

  10. [ACM] 线段树经典题

    POJ 2528 Mayor's posters m次区间染色,每次染色使用的颜色都不同,颜色可以覆盖,最后询问颜色数量,区间大小n为1e7,m为1e4. 做法一: 使用线段树,区间染色时间复杂度O( ...

最新文章

  1. 人工智能,不止于技术的革命--WOT2017全球创新技术峰会开幕
  2. 查询php 输出表格,php输出excel表格数据-PHP如何将查询出来的数据导出成excel表格(最好做......
  3. syslog-ng客户端,服务器配置
  4. [转载] Python print输出不换行没空格
  5. mysql-8.0.14图文安装_mysql8.0.14安装配置方法图文教程(通用)
  6. 使用遇到的问题_使用三防整理剂做织物整理会遇到这些问题...
  7. 《图像语义分析》学习笔记 (一)
  8. 球体重量在线计算机,用图形计算器研究热气球.doc
  9. 广州高清卫星地图 用百度卫星地图server下载 含标签、道路数据叠加 可商用
  10. (CVE-2014-0160) OpenSSL 心脏滴血漏洞
  11. oracle 多字段条件查询,Oracle 多字段查询
  12. UICollectionView基本使用详解(OC)
  13. Java大数据开发知识体系简介
  14. 计算机考研要考java吗_计算机二级考JAVA还是C?
  15. 初级程序员 高级程序员_程序员的十大电影
  16. 猫头鹰的深夜翻译:在JAVA中记录日志的十个小建议
  17. cmder 连接 centos_【有奖互动】46A,3400W——金手指电源连接器组合添quot;大quot;将!...
  18. 定时执行任务工具 - 定时执行专家
  19. java的IO技术中什么是I什么是O?
  20. nested exception is java.lang.ClassCastException: java.lang String cannot be cast to java.util.Map

热门文章

  1. 纯新手DSP编程--5.16--目标和主机设置
  2. Docker 中的网络管理与集群构建
  3. Mysql 自增主键
  4. flink API之 Environment
  5. scala 高阶函数,闭包及柯里化
  6. 【M10】在构造方法内阻止资源泄漏
  7. CentOS6.8 x86_64bit安装nginx-1.6.2
  8. 开源Docker管理工具kubernetes的简易安装和使用
  9. [ 1003 ] 判断小偷那些事
  10. UVA 1394 And Then There Was One 约瑟夫环数学方法