【Vjudge】P558E A Simple Task(线段树暴力)
题目链接
这题……太暴力了吧……
开二十六棵线段树维护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(线段树暴力)相关推荐
- CF558E A Simple Task 线段树
题解: 这种题之前做过一个类似的题目,也是关于选择区间然后给区间进行排序. 这种题用线段树把排序转换成区间修改区间求和即可. 类似的题目:https://vjudge.net/problem/HDU- ...
- codeforces 558E A Simple Task 线段树
题目链接 题意较为简单. 思路: 由于仅仅有26个字母,所以用26棵线段树维护就好了,比較easy. #include <iostream> #include <string> ...
- CodeForces - 731D 80-th Level Archeology(线段树+暴力/差分)
题目链接:点击查看 题目大意:给出 n 个数列,再给出一个模数 mod,每次操作可以将所有的数字进行:x = x %mod + 1 操作,问至少进行多少次操作,才能使得 n 个数列按照字典序非降序排列 ...
- HDU-3974 Assign the task 线段树 或 直接模拟多叉树 或 并查集 (三种方法)
题目大意 t 组数据(t<=10),每组第一行一个 n 表示 n 个员工(n<=5e4),接下来 n-1 行,每行两个整数 u,v 表示 v 是 u 的上司 然后一行 m 表示有 m 个操 ...
- Codeforces Round #723 (Div. 2) D. Kill Anton 线段树 + 暴力
传送门 文章目录 题意: 思路: 题意: 给你一个只有ANTOANTOANTO四个字母的字符串,你每次可以交换相邻两个,花费为111,让后让你打乱字符串,使得将打乱的字符串还原为原来的字符串的花费最小 ...
- HDU - 3974 Assign the task (线段树 + dfs序)
HDU - 3974 题意:有个公司有一些关系,每个人(除了boss)都有且仅有一个上司,这就是一棵树的关系,然后会有一些操作,C i,询问第i个人现在的任务,T x y,把y任务给x, 给x相当于给 ...
- CodeForces - 160D Edges in MST(思维+tarjan/树链剖分+线段树)
题目链接:点击查看 题目大意:给出一张 n 个点 m 条边组成的带权无向图,现在对于每条边来说,确定一下其分类: 一定是最小生成树上的边 可能是最小生成树上的边 一定不是最小生成树的边 题目分析:两种 ...
- 数据结构之线段树合并——永无乡,Lomsat gelral,Tree Rotations,Tree Rotations Escape Through Leaf
文章目录 [HNOI2012]永无乡 Lomsat gelral 「POI2011 R2 Day2」旋转树木 Tree Rotations Escape Through Leaf 线段树合并与 fhq ...
- YbtOJ#752-最优分组【笛卡尔树,线段树】
正题 题目链接:http://www.ybtoj.com.cn/problem/752 题目大意 nnn个人,每个人有cic_ici和did_idi分别表示这个人所在的队伍的最少/最多人数. 然后 ...
- [ACM] 线段树经典题
POJ 2528 Mayor's posters m次区间染色,每次染色使用的颜色都不同,颜色可以覆盖,最后询问颜色数量,区间大小n为1e7,m为1e4. 做法一: 使用线段树,区间染色时间复杂度O( ...
最新文章
- 人工智能,不止于技术的革命--WOT2017全球创新技术峰会开幕
- 查询php 输出表格,php输出excel表格数据-PHP如何将查询出来的数据导出成excel表格(最好做......
- syslog-ng客户端,服务器配置
- [转载] Python print输出不换行没空格
- mysql-8.0.14图文安装_mysql8.0.14安装配置方法图文教程(通用)
- 使用遇到的问题_使用三防整理剂做织物整理会遇到这些问题...
- 《图像语义分析》学习笔记 (一)
- 球体重量在线计算机,用图形计算器研究热气球.doc
- 广州高清卫星地图 用百度卫星地图server下载 含标签、道路数据叠加 可商用
- (CVE-2014-0160) OpenSSL 心脏滴血漏洞
- oracle 多字段条件查询,Oracle 多字段查询
- UICollectionView基本使用详解(OC)
- Java大数据开发知识体系简介
- 计算机考研要考java吗_计算机二级考JAVA还是C?
- 初级程序员 高级程序员_程序员的十大电影
- 猫头鹰的深夜翻译:在JAVA中记录日志的十个小建议
- cmder 连接 centos_【有奖互动】46A,3400W——金手指电源连接器组合添quot;大quot;将!...
- 定时执行任务工具 - 定时执行专家
- java的IO技术中什么是I什么是O?
- nested exception is java.lang.ClassCastException: java.lang String cannot be cast to java.util.Map