题意简述

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

  • 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();
}
}

洛谷 P2787 语文1(chin1)- 理理思维的更多相关文章

  1. 洛谷P2787 语文1(chin1)- 理理思维

    洛谷题目链接 珂朵莉树吼啊!!! 对于操作$1$,直接普通查询即可 对于操作$2$,直接区间赋值即可 对于操作$3$,其实也并不难,来一次计数排序后,依次插入即可,(注意初始化计数器数组)具体实现看代 ...

  2. 2019.01.19 洛谷P2787 语文1(chin1)- 理理思维(ODT)

    传送门 ODTODTODT水题. 题意:有一个字母序列,支持区间赋值,查询区间某个字母的数量,区间按字母序排序. 思路: 可以开262626棵线段树搞过去,然而也可以用ODTODTODT秒掉. 如果用 ...

  3. 洛谷P2787 语文1(chin1)- 理理思维(珂朵莉树)

    传送门 一看到区间推倒……推平操作就想到珂朵莉树 区间推平直接assign,查询暴力,排序的话开一个桶统计,然后一个字母一个字母加就好了 开桶统计的时候忘了保存原来的左指针然后挂了233 //mina ...

  4. 洛谷AT2342 Train Service Planning(思维,动态规划,珂朵莉树)

    洛谷题目传送门 神仙思维题还是要写点东西才好. 建立数学模型 这种很抽象的东西没有式子描述一下显然是下不了手的. 因为任何位置都以\(k\)为周期,所以我们只用关心一个周期,也就是以下数都在膜\(k\ ...

  5. 洛谷P4424 [HNOI/AHOI2018]寻宝游戏(思维题)

    题意 题目链接 Sol 神仙题Orz Orz zbq爆搜70.. 考虑"与"和"或"的性质 \(0 \& 0 = 0, 1 \& 0 = 0\) ...

  6. 洛谷 P3955 图书管理员【模拟/思维】

    题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个正整数.如果一本书的图 书编码恰好以读者的需求码结尾,那 ...

  7. 双栈排序(洛谷P1155)二分图的判定+思维贪心

    题目:戳这里 题目大意: 给你一个数列,问能否通过两个栈的push与pop把它输出成一个升序序列(每个数只能入队并出队一次) 不能的话输出0,能的话输出操作方法 主要思路: 1.判断是否可以成功输出升 ...

  8. 洛谷 P2391.白雪皑皑 (并查集,思维)

    题意:有\(n\)个点,对这些点进行\(m\)次染色,第\(i\)次染色会把区间\((i*p+q)\ mod\ N+1\)和\((i*q+p)\ mod\ N+1\)之间的点染成颜色\(i\),问最后 ...

  9. 洛谷P2367 语文成绩(差分)

    标准的差分应用题,不要想的太复杂,写成了线段树. 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=5e6+10 ...

随机推荐

  1. Bzoj 1997 [Hnoi2010]Planar题解

    1997: [Hnoi2010]Planar Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2224  Solved: 824[Submit][Stat ...

  2. spring boot 配置mybatis plus 控制台打印sql

    spring boot 版本2.1.5 mybatis plus 版本3.1.1 aplication.properties中添加 logging.level.com.demo.system.mapp ...

  3. Linux中的保护机制

    Linux中的保护机制 在编写漏洞利用代码的时候,需要特别注意目标进程是否开启了NX.PIE等机制,例如存在NX的话就不能直接执行栈上的数据,存在PIE 的话各个系统调用的地址就是随机化的. 一:ca ...

  4. 你真的了解 Cookie 和 Session 吗

    我在做面试官的时候,曾经问过很多朋友这个问题: Cookie 和 Session 有什么区别呢?大部分的面试者应该都可以说上一两句,比如:什么是 Cookie?什么是 Session?两者的区别等. ...

  5. MyEclipse2014破解版

    百度云:链接:http://pan.baidu.com/s/1c3jKMa 密码:yss0 等版本)后,不要打开软件. 二.解压破解文件压缩包,得到一下文件列表: 三.双击run.bat,即可运行cr ...

  6. myeclipse中更改默认jdk版本出错( Target is not a JDK root. System library was not found)

    原因是我的本地jdk版本是9.0,将jdk版本更改至8.0即可导入成功. jdk9.0导入myeclipse中去会有此类问题的发生,因此没有必要使用最新的jdk版本.

  7. SpringBoot Admin 使用指南

    什么是 SpringBoot Admin? Spring Boot Admin 是一个管理和监控你的 Spring Boot 应用程序的应用程序.这些应用程序通过 Spring Boot Admin ...

  8. 最火的分布式 HTAP 数据库 TiDB - 入门实践教程

    偶然在某篇博客看到了 TiDB,一个融合 OLTP 和 OLAP 的分布式开源数据库, GitHub 上 Star 很多,然后 watch 了,发现 commit 和 pull request 一直都 ...

  9. postman使用pre-request script计算md5

    接口加了验签逻辑,具体是md5(salt+时间戳).被某君吐槽说测试不方便啊能不能先关掉.其实没有必要打开又关闭验签功能,postman的pre-request script功能完全可以模拟客户端加密 ...

  10. X-Admin&ABP框架开发-系统日志

    网站正常运行中有时出现异常在所难免,查看系统运行日志分析问题并能够根据错误信息快速解决问题尤为重要,ABP对于系统运行日志这块已经做了很好的处理,默认采用的Log4Net已经足够满足开发过程中的需要了 ...