P2787 语文1(chin1)- 理理思维 题目背景 蒟蒻HansBug在语文考场上,挠了无数次的头,可脑子里还是一片空白. 题目描述 考试开始了,可是蒟蒻HansBug脑中还是一片空白.哦不!准确的说是乱七八糟的.现在首要任务就是帮蒟蒻HansBug理理思维.假设HansBug的思维是一长串字符串(字符串中包含且仅包含26个字母),现在的你,有一张神奇的药方,上面依次包含了三种操作: 获取第x到第y个字符中字母k出现了多少次 将第x到第y个字符全部赋值为字母k 将第x到第y个字符按照A-Z的…
原题传送门:P2787 语文1(chin1)- 理理思维 前置芝士:珂朵莉树 窝博客里对珂朵莉树的介绍 没什么好说的自己看看吧 珂朵莉树跑的飞快,但还是没有memset0小姐姐跑得快 操作1:暴力统计出奇迹 操作2:推平区间,珂朵莉树基本操作 操作3:排序区间,我就写了一个桶排 窝一开始头文件直接用bits出玄学ce toupper是把小写转大写,以防数据出锅 #pragma GCC optimize("O3") #include<cstdio> #include<c…
P2787 语文1(chin1)- 理理思维 1.获取第x到第y个字符中字母k出现了多少次 2.将第x到第y个字符全部赋值为字母k 3.将第x到第y个字符按照A-Z的顺序排序 读字符串我再单个单个读我吃素(shi)好了 Solution 考前练线段树 字母不多, 开26个线段树即可 操作一直接查询 操作二给定颜色全部涂色, 其他全部去色 操作三先记录此区间有什么颜色, 在分别赋值即可 Code #include<iostream> #include<cstdio> #include…
传送门 ODTODTODT水题. 题意:有一个字母序列,支持区间赋值,查询区间某个字母的数量,区间按字母序排序. 思路: 可以开262626棵线段树搞过去,然而也可以用ODTODTODT秒掉. 如果用ODTODTODT排序操作可以直接上桶排感觉快到飞起. 不会ODTODTODT的点这儿 代码: #include<bits/stdc++.h> #define ri register int #define fi first #define se second using namespace st…
传送门 一看到区间推倒……推平操作就想到珂朵莉树 区间推平直接assign,查询暴力,排序的话开一个桶统计,然后一个字母一个字母加就好了 开桶统计的时候忘了保存原来的左指针然后挂了233 //minamoto #include<iostream> #include<cstdio> #include<set> #define IT set<node>::iterator using std::set; int read(){ #define num ch-'0…
题意简述 维护字符串,支持以下操作: 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(cons…
洛谷题目链接 珂朵莉树吼啊!!! 对于操作$1$,直接普通查询即可 对于操作$2$,直接区间赋值即可 对于操作$3$,其实也并不难,来一次计数排序后,依次插入即可,(注意初始化计数器数组)具体实现看代码 代码: #include<iostream> #include<cstdio> #include<set> #include<algorithm> #include<cstring> #define Set set<Node>::it…
link 喵~珂朵莉树AC 珂朵莉树?见此处~ 这数据结构太暴力了,所以不讲了 Code: #include<iostream> #include<cstdio> #include<vector> #include<stack> #include<algorithm> #include<set> #include<cctype> #include<cstring> using namespace std ; i…
题目链接:https://www.luogu.org/problemnew/show/P1031 题目描述有 $N$ 堆纸牌,编号分别为 $1,2,…,N$.每堆上有若干张,但纸牌总数必为 $N$ 的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为 $1$ 堆上取的纸牌,只能移到编号为 $2$ 的堆上:在编号为 $N$ 的堆上取的纸牌,只能移到编号为 $N-1$ 的堆上:其他堆上取的纸牌,可以移到相邻左边或右边的堆上. 现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都…
题目链接 正解是LCT但我不会呀蛤蛤蛤蛤蛤 (分块我也没想出来 把区间分成根n个块,每个块内记录两个东西,就是该位置弹多少次能够弹出这个块,以及该位置弹到最后弹出去了之后能够弹到哪里. 然后查询就一个块一个块的跳,修改就暴力重构这个块. #include<cstdio> #include<algorithm> #include<cctype> #include<cstring> #include<cmath> #include<cstdli…