进行q次操作对区间(l, r)内的字符进行升序或降序排列,并结合计数排序与线段树优化技术解决Codeforces div2 558E问题
发布时间
阅读量:
阅读量
题意:
假设有一个字符串s,在进行了q次操作后(每一次对区间(l_i, r_i)内的字符进行升序或降序排列),最终输出处理后的完整字符串。
分析:
核心理念即为计数排序...
所谓的计数排序是一种被称为计数排序的方法。它旨在对数值较为集中的数据进行有序排列的技术。该算法的时间复杂度为线性阶(O(n)),但应用条件极为严格。首先遍历所有n个数据并统计每个数值出现的频率。接着再次遍历所有n个数据以统计:对于每一个数值ai,在它前面有多少个相同的或较小的数值。基于这些统计结果,我们可以明确地确定出在最终有序序列中ai的位置,并能够在常数时间内完成这一确定过程。
解题思路:
针对每一个Query,在区间(l, r)内统计各个字母出现的频率。
接着按照非升序或非降序进行分类排序。
这一操作等价于:
首先标记满足条件的字符c为已处理,并从队列中删除它们;
随后将这些字符加入结果集合,并按升序或降序排序。
for(int j=x; j<=y; j++)
cnt[s[j] - 'a']++;
ind = 0;
for(int j=x; j<=y; j++)
{
while(cnt[ind] == 0)
ind++;
s[j]
全部评论 (0)
还没有任何评论哟~
