考试题string——线段树。】的更多相关文章

string[题目描述]给定一个由小写字母组成的字符串 s.有 m 次操作,每次操作给定 3 个参数 l,r,x.如果 x=1,将 s[l]~s[r]升序排序;如果 x=0,将 s[l]~s[r]降序排序.你需要求出最终序列.[输入数据]第一行两个整数 n,m.第二行一个字符串 s.接下来 m 行每行三个整数 x,l,r.[输出数据]一行一个字符串表示答案.[样例输入]5 2cabcd1 3 13 5 0[样例输出]abdcc[数据范围]对于 40%的数据,n,m<=1000.对于 100%的数…
JZOJ P5829 A. string 题面:https://www.cnblogs.com/Juve/articles/11286476.html 考场上想起了排序这道题:https://www.cnblogs.com/Juve/p/11269638.html n遍二分? 亲测TLE,0分 你暴力sort都有40分 当然这题不用这样 我们借鉴排序的思路 我们用线段树来完成操作,那么我们想线段树存什么,懒标记是什么 借鉴刚才那道题,我们将节点信息和懒标记合二为一 设tr[k].val,如果k管…
题意大概是给你一个字符串,1e5次修改,每次给一个区间升序排列或降序排列,最后输出这个字符串; 其实是个挺裸的线段树优化题;但是我没有意识去结合桶排,扑该..... 首先 1.40分算法 O(NMlogN) inline void update(int k){ ;i<=;++i){ tmp[k].tong[i]=tmp[ls].tong[i]+tmp[rs].tong[i]; } } void ud(int k,int l,int r,int L,int R){ if(L<=l&&am…
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/3973/ 题意是:给出一个模式串,再给出一些串组成一个集合,操作分为两种,一种是替换模式串中的一个字符,还有一种是查询模式串中[l,r]区间的字符串有没有出现在字符串集合中. 由于数据量很大,只能用O(nlogn)复杂度的算法才能通过,我们首先想到区间查询的操作线段树是可以做的,但是怎么样将一个子串唯一化呢?这就要说道字符串哈希了,我的做法是通过字符串哈希将字符串变成31进制数并且让它自然溢出,也就是对2^64…
因为题中只有a-z,所以区间中大量字母都是重复的,我们不妨利用桶的性质. 开一棵树,里面维护当前区间内的相同元素,若区间内元素不同,则为零 每次升序操作就先查询一遍区间,用桶将每个区间的a-z元素统计出, 然后按照顺序(L-L+tong[1]-1)..........进行区间修改, 注意要有向上修改的updata!!! 因为区间有很多字母相同,修改近似是mlogn*26(26次嘛....)查询mlong(n); 1 #include<iostream> 2 #include<cstdio…
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5008 Description In this problem, you are given a string s and q queries. For each query, you should answer that when all distinct substrings of string s were sorted lexicographically, which one is…
String Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) Problem DescriptionBob has a dictionary with N words in it.Now there is a list of words in which the middle part of the word has continuous letters disappeared.…
http://acm.hdu.edu.cn/showproblem.php?pid=3973 题意 给一个词典和一个主串.有两种操作,查询主串某个区间,问这主串区间中包含多少词典中的词语.修改主串某一位置的字符. 分析 题目要求区间查询,和单点更新,那么最先想到的应该是线段树.可字符串怎么利用线段树呢?用hash!首先将词典按规则hash后放入map,然后将主串的hash值放置入线段树中.问题来了,怎么更新结点的hash值呢?假如现在我们知道了s[l...mid]和s[mid+1...r]的ha…
题意 在 \(S\) 中找出 \(t\) 个子串满足 \(t_{i+1}\) 是 \(t_{i}\) 的子串,要让 \(t\) 最大. \(|S| \leq 5\times 10^5\). 分析 定义状态 \(f_{i}\) 表示从 \(i\) 出发能够得到的最长的 \(journey\) . 容易得到最终的答案最右边的串长度一定可以是1. 同时如果删掉没用的部分过后 \(t_i\) 的长度一定可以为 $t_{i+1} +1 $. 如果在 \(i\) 位置存在长度为 \(k\) 的答案的话,将两…
题目链接 https://codeforces.com/contest/1063/problem/F 题解 虽然本题有时间复杂度较高但非常好写的做法...... 首先,若答案为 \(k\),则一定存在一种最优方案,使得对于任意 \(i \in [1, k)\),有 \(|t_i| = |t_{i + 1}| + 1\),换句话说,第 \(i + 1\) 个字符串可以通过第 \(i\) 个字符串删掉首字符或尾字符得到.其正确性显然. 这样,我们可以记录 \(f_i\) 表示串 \(s\) 从 \(…