题意简述

维护字符串,支持以下操作:

  • 0 l r k:求l~r中k的出现次数
  • 1 l r k:将l~r中元素赋值为k
  • 2 l r:询问l~r中最大连续1的长度

题解思路

珂朵莉树暴力赋值,排序,查询

代码

#include <set>
#include <iostream>
#define IT std::set<Node>::iterator
int n,m,opt,l,r,c[26];
char ch;
struct Node {
int l,r,v;
Node(const int& L,const int& R,const int& V):l(L),r(R),v(V) {}
bool operator <(const Node& x) const { return l<x.l; };
};
std::set<Node> s;
inline int read_char() {
std::cin>>ch; return ch>'Z'?ch-'a':ch-'A';
}
inline IT split(const int& x) {
IT it=s.lower_bound(Node(x,0,0));
if (it!=s.end()&&it->l==x) return it;
--it; int L=it->l,R=it->r,V=it->v; s.erase(it);
s.insert(Node(L,x-1,V)); return s.insert(Node(x,R,V)).first;
}
inline void assign(const int& l,const int& r,const int& v) {
IT itr=split(r+1),itl=split(l);
s.erase(itl,itr); s.insert(Node(l,r,v));
}
inline void sort(int l,const int& r) {
IT itr=split(r+1),itl=split(l);
for (register IT it=itl;it!=itr;++it) c[it->v]+=it->r-it->l+1;
s.erase(itl,itr);
for (register int i=0;i<26;++i)
if (c[i]) {
s.insert(Node(l,l+c[i]-1,i));
l+=c[i]; c[i]=0;
}
}
inline int query(const int& l,const int& r,const int& v) {
IT itr=split(r+1),itl=split(l); int s=0;
for (;itl!=itr;++itl) if (itl->v==v) s+=itl->r-itl->l+1;
return s;
}
inline void print() {
std::cout<<"s:\n";
for (register IT it=s.begin();it!=s.end();++it)
std::cout<<it->l<<' '<<it->r<<' '<<it->v<<'\n';
std::cout<<"end\n";
}
int main() {
std::cin>>n>>m;
for (register int i=1;i<=n;++i) s.insert(Node(i,i,read_char()));
for (;m;--m) {
std::cin>>opt>>l>>r;
if (opt==1) std::cout<<query(l,r,read_char())<<'\n';
else if (opt==2) assign(l,r,read_char());
else sort(l,r);
// print();
}
}

最新文章

  1. 1Z0-053 争议题目解析510
  2. js 封装设计cookie
  3. 一个java的Profile工具
  4. sql 数字转人民币大写函数(两种方法)
  5. C++ 重载操作符与转换
  6. SOLR (全文检索)
  7. Memcached 笔记与总结(1)Linux(CentOS 6.6) 和 Windows(7)下安装与配置 Memcached (1.4.24)与 Memcached 基础命令
  8. 【linux】iptables 开启80端口
  9. Xcode6 运行程序后,右侧Debug区域的Memory显示空白解决方法
  10. git上自然框架源码
  11. ifconfig命令--查看、配置、启用或禁用网络接口的工具
  12. Hive修改行级别数据
  13. java反射取private字段
  14. AtCoder Grand Contest 030 (AGC030) C - Coloring Torus 构造
  15. 解决 ASP.NET Core 自定义错误页面对 Middleware 异常无效的问题
  16. [POJ 2689] Prime Distance
  17. deepin修改javahome不生效,一直显示openjdk解决
  18. KiCad 如何画板框
  19. (01)JVM-内存三大核心区域以及分析
  20. Spring &lt;context:annotation-config/&gt; 说明

热门文章

  1. bzoj1052 9.20考试 第二题 覆盖问题
  2. Jquery serialize()提交多个表单数据
  3. 如果通过脚本来关闭程序-linux
  4. 个人永久性免费-Excel催化剂功能第31波-数量金额分组凑数功能,财务表哥表姐最爱
  5. 吐槽下Excel的十大不规范使用问题
  6. MapReduce之WordCount
  7. [小米OJ] 10. 爬楼梯
  8. Vue的基本使用(四)
  9. 如何在 Centos7 中使用阿里云的yum源
  10. Kotlin学习快速入门(3)——类 继承 接口