题解:

平衡树维护hash值

为了支持加入删除操作 x*base^y 其中y为他是第k大

同一般的维护方法,我们不用对每个节点维护他的hash值

而是只用记录他的x值(他的位置) 然后通过updata的时候维护

很神奇的一点是

我用了mo数就炸了。。。

直接自然溢出就好了。。。应该是哪里正负没处理好。。

另外还wa了一个点。。

代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=5e5+;
const ll Base=;
ll n,m,q,cl[N],a[N],b[N];
map<ll,ll> M;
struct Splay{
ll count2[N],data[N],ls[N],rs[N],fa[N],v[N],vv[N],root=,cnt=;
void updata(ll x)
{
count2[x]=count2[ls[x]]+count2[rs[x]]+;
data[x]=(data[ls[x]]+1ll*data[rs[x]]*cl[count2[ls[x]]+]
+cl[count2[ls[x]]]*v[x]);
}
void rotate(ll x,ll y)
{
ll fa1=fa[x];
if (y==)
{
rs[fa1]=ls[x];
if (ls[x]) fa[ls[x]]=fa1;
} else
{
ls[fa1]=rs[x];
if (rs[x]) fa[rs[x]]=fa1;
}
fa[x]=fa[fa1];
if (fa[fa1])
{
ls[fa[fa1]]==fa1?ls[fa[fa1]]=x:rs[fa[fa1]]=x;
}
fa[fa1]=x;
if (y==) ls[x]=fa1; else rs[x]=fa1;
updata(fa1); updata(x);
}
void splay(ll x,ll goal)
{
ll fa1=fa[x];
while (fa1!=goal)
{
if (fa[fa1]==goal)
x==ls[fa1]?rotate(x,):rotate(x,);
else
if (fa1==ls[fa[fa1]])
if (x==ls[fa1]) rotate(fa1,),rotate(x,);
else rotate(x,),rotate(x,);
else
if (x==rs[fa1]) rotate(fa1,),rotate(x,);
else rotate(x,),rotate(x,);
fa1=fa[x];
}
if (!goal) root=x;
}
ll search(ll goal)
{
ll x=root;
while (x)
{
if (vv[x]==goal) return(x);
if (vv[x]<goal) x=rs[x];
else x=ls[x];
}
}
void ins(ll y,ll x1)
{
ll x=root;
while (x)
{
if (y>vv[x])
if (rs[x]) x=rs[x]; else break;
else
if (ls[x]) x=ls[x]; else break;
}
if (!x) root=++cnt;
else
{
if (y>vv[x])
{
rs[x]=++cnt; fa[cnt]=x;
} else
{
ls[x]=++cnt; fa[cnt]=x;
}
}
vv[cnt]=y; v[cnt]=x1; count2[cnt]=;
splay(cnt,);
}
void del(ll x1)
{
ll x=search(x1);
splay(x,);
if (!ls[x])
{
root=rs[root]; fa[root]=; return;
}
ll y=ls[x];
while (rs[y]) y=rs[y];
rs[y]=rs[x];
if (rs[y]) fa[rs[y]]=y;
updata(y);
root=ls[x]; fa[ls[x]]=; splay(y,);
}
}A,B;
int main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
ios::sync_with_stdio(false);
cl[]=;
for (ll i=;i<N;i++) cl[i]=(1ll*cl[i-]*Base);
cin>>n>>m>>q;
ll cnt=;
for (ll i=;i<m;i++) cnt+=cl[i];
for (ll i=;i<=n;i++) cin>>a[i];
for (ll i=;i<=m;i++) A.ins(a[i],i);
++M[A.data[A.root]];
for (ll i=m+;i<=n;i++)
{
A.del(a[i-m]); A.ins(a[i],i);
ll tmp=A.data[A.root]-1ll*cnt*(i-m);
++M[tmp];
}
for (ll i=;i<=m;i++)
{
cin>>b[i];
B.ins(b[i],i);
}
for (ll i=;i<=q;i++)
{
ll x,y;
cin>>x>>y;
B.del(b[x]);
b[x]=y;
B.ins(y,x);
cout<<M[B.data[B.root]]<<endl;
}
return ;
}

P4715 「英语」Z 语言的更多相关文章

  1. [Luogu4715]「英语」Z 语言

    luogu description 你有一个长度为\(n\)的串\(A\)和一个长度为\(m\)的串\(B\),字符集大小\(2^{31}\),且同一个串中没有相同的元素. 定义\(B\)串与\(A_ ...

  2. 「HNOI2004」「LuoguP2292」L语言(AC自动机

    题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成.一个字典D是若干个单词的 ...

  3. Python文字转换语音,让你的文字会「说话」,抠脚大汉秒变撒娇萌妹

    作者 | pk 哥 来源公众号 | Python知识圈(ID:PythonCircle) APP 也有文字转换为语音的功能,虽然听起来很别扭,但是基本能解决长辈们看不清文字或者眼睛疲劳,通过文字转换为 ...

  4. 【LOJ】#3046. 「ZJOI2019」语言

    LOJ#3046. 「ZJOI2019」语言 先orz zsy吧 有一个\(n\log^3n\)的做法是把树链剖分后,形成logn个区间,这些区间两两搭配可以获得一个矩形,求矩形面积并 然后就是对于一 ...

  5. 「ZJOI2019」语言 解题报告

    「ZJOI2019」语言 3个\(\log\)做法比较简单,但是写起来还是有点麻烦的. 大概就是树剖把链划分为\(\log\)段,然后任意两段可以组成一个矩形,就是个矩形面积并,听说卡卡就过去了. 好 ...

  6. 正则表达式从入门到放弃「Java」

    正则表达式能做什么? 正则表达式可以用来搜索.编辑或处理文本. 「都懂它可以处理文本,可到底是怎么回事?」 正则表达式的定义 百度百科:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特 ...

  7. 「MoreThanJava」当大学选择了计算机之后应该知道的

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  8. 面试都在问的「微服务」「RPC」「服务治理」「下一代微服务」一文带你彻底搞懂!

    ❝ 文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) ❞ 单体式应用程序 与微服务相对的另一个概念是传统的「单体式应用程 ...

  9. 「MoreThanJava」计算机系统概述

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

随机推荐

  1. web@css引入方式,基本选择器,3大特性,高效运行

    4.高效的css 所谓高效就是让浏览器查找更少的元素标签来确定匹配的style元素.      1.不要再ID选择器前使用标签名        解释:ID选择是唯一的,加上标签名相当于画蛇添足了,没必 ...

  2. atom 的使用插件

    emmet # html补全minimap # 源码预览图linter # 语法检查file-icons # 文件图标docblockr # 注释块autoclose-html # 自动闭合html标 ...

  3. Mysql 通过frm&ibd 恢复数据

    mysql存储在磁盘中,各种天灾人祸都会导致数据丢失.大公司的时候我们常常需要做好数据冷热备,对于小公司来说要做好所有数据备份需要支出大量的成本,很多公司也是不现实的.万一还没有做好备份,数据被误删除 ...

  4. Linux 安装Python和Django

    1.下载python源码包 网址: https://www.python.org/ 在Downloads中打开Source code 由于 Django1.11.15不兼容3.7版本的python 所 ...

  5. 【原创】Linux基础之测试域名IP端口连通性

    一 测试域名是否可达 1 ping # ping www.baidu.comPING www.a.shifen.com (220.181.112.244) 56(84) bytes of data.6 ...

  6. python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)

    一.模块的循环导入问题 run.py # import m1 # 第一次导入 m1.py # 错误示范 ''' print('正在导入m1') from m2 import y #第一次导入m2 x= ...

  7. Oracle11g 体系结构

    一:Oracle11g 体系结构 二:逻辑储存结构 二.1:数据块(data blocks) ----通过 v$parameter数据字典来查询oracle标准数据块的大小. SYS@orcl> ...

  8. Confluence 6 从一个备份中获得文件附件

    页面中的文件附件可以从备份中获得而不需要将备份文件导入到 Confluence 中.这个在用户删掉了附件,但是你还是想恢复这个附件的时候就变得非常有用了. 自动备份和手动备份都允许你进行这个操作,但是 ...

  9. Confluence 6 升级 Confluence 使用数据源

    如果你对 Confluence 进行升级(手动或者使用安装器),你需要: 停止 Confluence (如果你已经尝试开始启动). 拷贝你的数据库驱动到 <installation-direct ...

  10. NSLayoutConstraint 使用详解 VFL使用介绍

    注意 使用前必须先取消所有的你想设置View 的 Autoresizing 属性 因为 Autoresizing  Layout不能共存  系统默认是 Autoresizing for v in su ...