【题解】Luogu P2787 语文1(chin1)- 理理思维
原题传送门:P2787 语文1(chin1)- 理理思维
前置芝士:珂朵莉树
窝博客里对珂朵莉树的介绍
没什么好说的自己看看吧
珂朵莉树跑的飞快,但还是没有memset0小姐姐跑得快
操作1:暴力统计出奇迹
操作2:推平区间,珂朵莉树基本操作
操作3:排序区间,我就写了一个桶排
窝一开始头文件直接用bits出玄学ce
toupper是把小写转大写,以防数据出锅
#pragma GCC optimize("O3")
#include<cstdio>
#include<cctype>
#include<cstring>
#include<set>
#define IT set<node>::iterator
using namespace std;
inline int read()
{register int x=0,f=1;register char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
struct node
{int l,r;mutable char v;node(int L, int R=-1, char V=0):l(L), r(R), v(V) {}bool operator<(const node& o) const{return l < o.l;}
};
set<node> s;
IT split(int pos)
{IT it = s.lower_bound(node(pos));if (it != s.end() && it->l == pos) return it;--it;int L = it->l, R = it->r;char V = it->v;s.erase(it);s.insert(node(L, pos-1, V));return s.insert(node(pos, R, V)).first;
}
int count(int l,int r,char v)
{IT itr = split(r+1) ,itl = split(l);int ans=0;for( ; itl != itr ; ++itl)if(itl->v == v)ans+=itl->r-itl->l+1;return ans;
}
void assign_val(int l,int r,char v)
{IT itr = split(r+1),itl = split(l);s.erase(itl, itr);s.insert(node(l, r, v));
}
void sort_val(int l,int r)
{int cnt[27];memset(cnt,0,sizeof(cnt));IT itr = split(r+1), itl = split(l), it = itl;for( ; itl != itr ; ++itl)cnt[itl->v-'A']+=itl->r-itl->l+1;s.erase(it,itr);for(register int i=0;i<26;++i)if(cnt[i]){s.insert(node(l,l+cnt[i]-1,i+'A'));l+=cnt[i];}
}
char str[50005];
int main()
{int n=read(),m=read();scanf("%s",str+1);int cnt=1;char last=toupper(str[1]);for(register int i=2;i<=n;++i){str[i]=toupper(str[i]);if(str[i]==last)++cnt;else{s.insert(node(i-cnt,i-1,last));last=str[i];cnt=1;}}s.insert(node(n+1-cnt,n,last));while(m--){int opt=read(),l=read(),r=read();char dic[5];if(opt==1){scanf("%s",dic);printf("%d\n",count(l,r,toupper(dic[0])));}else if(opt==2){scanf("%s",dic);assign_val(l,r,toupper(dic[0]));}elsesort_val(l,r);}return 0;}
转载于:https://www.cnblogs.com/yzhang-rp-inf/p/9780672.html
【题解】Luogu P2787 语文1(chin1)- 理理思维相关推荐
- P2787 语文1(chin1)- 理理思维(线段树)
P2787 语文1(chin1)- 理理思维(线段树) 对每个字母开一棵线段树 操作1就是区间查询 操作2就是区间修改 操作3可以看成 先预处理查询出区间对应的每个字母的个数,然后进行区间修改. 然后 ...
- P2787 语文1(chin1)- 理理思维
题目背景 蒟蒻HansBug在语文考场上,挠了无数次的头,可脑子里还是一片空白. 题目描述 考试开始了,可是蒟蒻HansBug脑中还是一片空白.哦不!准确的说是乱七八糟的.现在首要任务就是帮蒟蒻Han ...
- Luogu 2787 语文1(chin1)- 理理思维
题目链接:传送门 题目背景 蒟蒻HansBug在语文考场上,挠了无数次的头,可脑子里还是一片空白. 题目描述 考试开始了,可是蒟蒻HansBug脑中还是一片空白.哦不!准确的说是乱七八糟的.现在首要任 ...
- 题解 luogu P2568 GCD
题解 luogu P2568 GCD 时间:2019.3.11 欧拉函数+前缀和 题目描述 给定整数\(N\),求\(1\le x,y \le N\)且\(\gcd(x,y)\)为素数的数对\((x, ...
- 【luogu CF1569D】Inconvenient Pairs(思维)
Inconvenient Pairs 题目链接:luogu CF1569D 题目大意 有一个方形网格,然后只有一些竖着的直线和横着的直线是可以走的(会给出它们的 x 坐标或 y 坐标). 然后会给你一 ...
- 计算机多媒体技术的思维导图,基于多媒体技术的思维导图在小学语文教学中的应用研究...
李敏 摘 要:随着科学技术的快速发展以及教育改革的不断深入,传统的教学方法也在潜移默化中有所改变,多媒体技术在教学活动中应用的越来越广泛,尤其基于多媒体技术的思维导图的出现与发展,显著提高了小学语文的 ...
- 牛客多校10 - Decrement on the Tree(边权转点权+思维)
题目链接:点击查看 题目大意:给出一棵 n 个点组成的树,每条边上都有边权,现在可以进行数次操作,每次操作可以选择一条路径,使得路径上的权值减一,问最少需要进行多少次操作才能使得所有的边权变为 0 , ...
- 题解P3942_将军令
初始数组忘了赋初值,,,我真是个机灵鬼 还有这题是三倍经验P2279&&P2016,这题的实现思想来自P2279首个题解 luogu 简化题意 给你一棵树,你有一些可以覆盖范围为$k$ ...
- xMind思维导图软件如何合并多个导图
xMind是一个非常好用的思维导图软件,不过有一天在使用的时候想将一个导图上的内容复制到另一个导图中时,总是不成功.在网上也没找到方法,于是自己研究了好久,才搞清楚怎么用,现在将方法记录下来,以便参考 ...
最新文章
- 兹介绍我校计算机科学与技术,清华大学计算机科学与技术系
- VS2010静态编译生成.exe可执行文件
- java高并发(十六)J.U.C之ForkJoin
- exc读入到matlab,matlab外部程序接口-excel
- Visio图形自动编号
- 为什么t6显示登录不到服务器,t6客户端登录不到服务器
- Oracle 建表语句
- 读《显微镜下的大明》马伯庸---笔记
- alot英文怎么读_alot...of是什么意思
- Arcgis 创建切片包(*.tpk)
- Embedded Browser WindowsPC内嵌网页
- 阶梯博弈(Staircase Nim)
- 微信公众号服务器端脑图,微信公众号中隐藏的思维导图工具,帮你随时随地高效思考...
- 本地搭建自己的电影网站,并发布公网访问 1-3
- 【Java并发】Java并发编程-02
- C语言每日一练 —— 第20天:位运算
- 第十六章: 请多一点
- asp.net引用System.Speech实现语音提示
- 一步步教你怎么用Python写贪吃蛇游戏
- Deep Learning Methods for Remote Heart Rate Measurement:A Review and Future Research Agenda