2019.01.19 洛谷P2787 语文1(chin1)- 理理思维(ODT)
传送门
ODTODTODT水题。
题意:有一个字母序列,支持区间赋值,查询区间某个字母的数量,区间按字母序排序。
思路:
可以开262626棵线段树搞过去,然而也可以用ODTODTODT秒掉。
如果用ODTODTODT排序操作可以直接上桶排感觉快到飞起。
不会ODTODTODT的点这儿
代码:
#include<bits/stdc++.h>
#define ri register int
#define fi first
#define se second
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
int n,m;
struct Node{
int l,r;
mutable int v;
Node(int l,int r=-1,int v=0):l(l),r(r),v(v){}
friend inline bool operator<(const Node&a,const Node&b){return a.l<b.l;}
};
set<Node>S;
typedef set<Node>::iterator It;
typedef pair<int,int> pii;
vector<pii>q;
inline It split(int pos){
It it=S.lower_bound(pos);
if(it!=S.end()&&it->l==pos)return it;
--it;
if(pos>it->r)return S.end();
int l=it->l,r=it->r,v=it->v;
return S.erase(it),S.insert(Node(l,pos-1,v)),S.insert(Node(pos,r,v)).first;
}
inline void assign(int l,int r,int v){
It R=split(r+1),L=split(l);
S.erase(L,R),S.insert(Node(l,r,v));
}
inline int query(int l,int r,int k){
int ret=0;
It R=split(r+1),L=split(l);
for(It it=L;it!=R;++it)if(k==it->v)ret+=it->r-it->l+1;
return ret;
}
inline void update(int l,int r){
It R=split(r+1),L=split(l);
static int cnt[26],len;
for(ri i=0;i<26;++i)cnt[i]=0;
for(It it=L;it!=R;++it)cnt[it->v]+=it->r-it->l+1;
S.erase(L,R),len=0;
for(ri i=0;i<26;++i){
if(!cnt[i])continue;
S.insert(Node(l+len,l+len+cnt[i]-1,i)),len+=cnt[i];
}
}
const int N=5e4+5;
char s[N];
inline int getit(char x){return x>='A'&&x<='Z'?x-'A':x-'a';}
int main(){
n=read(),m=read(),scanf("%s",s+1);
for(ri i=1;i<=n;++i)S.insert(Node(i,i,getit(s[i])));
for(ri i=1,op,l,r,k;i<=m;++i){
op=read(),l=read(),r=read();
char t[2];
switch(op){
case 1:scanf("%s",t),cout<<query(l,r,getit(t[0]))<<'\n';break;
case 2:scanf("%s",t),assign(l,r,getit(t[0]));break;
default:update(l,r);
}
}
return 0;
}
2019.01.19 洛谷P2787 语文1(chin1)- 理理思维(ODT)的更多相关文章
- 洛谷P2787 语文1(chin1)- 理理思维
洛谷题目链接 珂朵莉树吼啊!!! 对于操作$1$,直接普通查询即可 对于操作$2$,直接区间赋值即可 对于操作$3$,其实也并不难,来一次计数排序后,依次插入即可,(注意初始化计数器数组)具体实现看代 ...
- 2019.01.21 洛谷P3919 【模板】可持久化数组(主席树)
传送门 题意简述:支持在某个历史版本上修改某一个位置上的值,访问某个历史版本上的某一位置的值. 思路: 用主席树直接维护历史版本即可. 代码: #include<bits/stdc++.h> ...
- 2019.01.04 洛谷P4719 【模板】动态dp(链分治+ddp)
传送门 ddpddpddp模板题. 题意简述:给你一棵树,支持修改一个点,维护整棵树的最大带权独立集. 思路: 我们考虑如果没有修改怎么做. 貌似就是一个sbsbsb树形dpdpdp,fi,0f_{i ...
- 2019.01.04 洛谷 P4721 【模板】分治 FFT
传送门 如同题目所描述的一样,这是一道板题. 题意简述:给你一个数组g1,2,...ng_{1,2,...n}g1,2,...n并定义f0=1,fi=∑j=1ifi−jgjf_0=1,f_i=\su ...
- 2019.01.02 洛谷P4512 【模板】多项式除法
传送门 解析 代码: #include<bits/stdc++.h> #define ri register int using namespace std; typedef long l ...
- 洛谷P2787 语文1(chin1)- 理理思维(珂朵莉树)
传送门 一看到区间推倒……推平操作就想到珂朵莉树 区间推平直接assign,查询暴力,排序的话开一个桶统计,然后一个字母一个字母加就好了 开桶统计的时候忘了保存原来的左指针然后挂了233 //mina ...
- 洛谷 P2787 语文1(chin1)- 理理思维
题意简述 维护字符串,支持以下操作: 0 l r k:求l~r中k的出现次数 1 l r k:将l~r中元素赋值为k 2 l r:询问l~r中最大连续1的长度 题解思路 珂朵莉树暴力赋值,查询 代码 ...
- Solution -「JSOI 2019」「洛谷 P5334」节日庆典
\(\mathscr{Description}\) Link. 给定字符串 \(S\),求 \(S\) 的每个前缀的最小表示法起始下标(若有多个,取最小的). \(|S|\le3\time ...
- 洛谷AT2342 Train Service Planning(思维,动态规划,珂朵莉树)
洛谷题目传送门 神仙思维题还是要写点东西才好. 建立数学模型 这种很抽象的东西没有式子描述一下显然是下不了手的. 因为任何位置都以\(k\)为周期,所以我们只用关心一个周期,也就是以下数都在膜\(k\ ...
随机推荐
- C/C++ typedef用法详解(真的很详细)
第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, ...
- 约束布局 ConstraintLayout
app:layout_constraintVertical_bias="0.5"app:layout_constraintHorizontal_bias="0.5&quo ...
- C#后台对密码框不能直接赋值
当页面密码框 为 textmode="textpassword"时候,使用 txtpwd.text="XXX",是不会显示的, 应该使用txtpass.Attr ...
- PAT L2-014 列车调度(最长上升nlogn)
火车站的列车调度铁轨的结构如下图所示. 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条轨道进入,最后从出口离开.在图中有 ...
- IOS是否存在32位和64位版本的区分
苹果于2013年9月推出了iPhone 5S新手机,采用的全新A7处理器其最大特色就是支持64位运算.其64位A7处理器的使用意味着iPhone性能会大有提高,性能和速度更加出色:而要到达到这样的性能 ...
- maven 转化gradle
- ARM板移植udev-126
下载udev-126.tar.xz 下载的网址为: https://mirrors.edge.kernel.org/pub/linux/utils/kernel/hotplug/ 解压文件并且编译 # ...
- chorem浏览器无法下载
下载的时候指定字节的长度 context.Response.AddHeader("Content-Length", bytes.Length.ToString()); contex ...
- 1到n的整数中,1出现的次数
参考链接:https://discuss.leetcode.com/topic/18054/4-lines-o-log-n-c-java-python 1到n的整数中,1出现的次数,如11中,1出现了 ...
- django中的时区设置TIME_ZONE,USE_TZ
Django如果开启了Time Zone功能,则所有的存储和内部处理,甚至包括直接print显示全都是UTC的.只有通过模板进行表单输入/渲染输出的时候,才会执行UTC本地时间的转换. 所以我建议后台 ...