考虑设计一个哈希函数 \(hash(x) = f(x) \times base^x\)。

其中 \(f(x)\) 表示 \(\sum_{j=1}^{i-1} [j <i]\)。

然后类似于滑动窗口计算区间哈希值,加入一个数就计算贡献,减去一个数就计算这个数产生了贡献,两个东西都可以树状数组维护,那么愉快做完了。

#include<bits/stdc++.h>
#define int unsigned long long
#define lowbit(x)(x&(-x))
using namespace std;
//f(x) 表示 x 前面小于 x 的数的数量
//hash(x) = 1331^(x)*f(x)
const int maxn = 1e6+114;
const int base = 1145141;
int tr[maxn][2],_pow[maxn];
void add(int x,int v,int type){
while(x<maxn){
tr[x][type]+=v;
x+=lowbit(x);
}
}
int pre(int x,int type){
int res=0;
while(x>0){
res+=tr[x][type];
x-=lowbit(x);
}
return res;
}
int a[maxn],b[maxn],n,m,s,val1,ans;
queue<int> q;
signed main(){
_pow[0]=1;
for(int i=1;i<maxn;i++) _pow[i]=_pow[i-1]*base;
cin>>n>>m>>s;
for(int i=1;i<=n;i++){
cin>>a[i];
a[i]++;
}
for(int i=1;i<=m;i++){
cin>>b[i];
b[i]++;
val1+=_pow[i]*pre(b[i]-1,0);
add(b[i],1,0);
}
for(int i=0;i<maxn;i++) tr[i][0]=tr[i][1]=0;
int val2=0,sum=0;
for(int i=1;i<=n;i++){
val2+=_pow[i]*pre(a[i]-1,0);
add(a[i],1,0);
add(a[i],_pow[i],1);
sum+=_pow[i];
if(i>m){
val2-=(sum-pre(a[i-m],1));
add(a[i-m],-1,0);
add(a[i-m],-_pow[i-m],1);
sum-=_pow[i-m];
}
if(i>=m){
if(val2==val1*_pow[i-m]){
q.push(i-m+1);
}
}
}
cout<<q.size()<<'\n';
while(q.size()>0){
cout<<q.front()<<'\n';
q.pop();
}
return 0;
}
/*
9 6 10
5 6 2 10 10 7 3 2 9
1 4 4 3 2 1
*/

感觉最多评绿吧,再高就恶评了(逃。

BZOJ 1461 题解的更多相关文章

  1. BZOJ 1461: 字符串的匹配

    Description 同上题. Sol KMP+树状数组. 写这题的时候我灰常naive...不管了...直接贴代码... Code /******************************* ...

  2. BZOJ 3732 题解

    3732: Network Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= 30,000) ...

  3. bzoj 2669 题解(状压dp+搜索+容斥原理)

    这题太难了...看了30篇题解才整明白到底咋回事... 核心思想:状压dp+搜索+容斥 首先我们分析一下,对于一个4*7的棋盘,低点的个数至多只有8个(可以数一数) 这样的话,我们可以进行一个状压,把 ...

  4. bzoj一句话题解

    发现好多人都在搞这个...本人也想来试试(Solved刚到70就搞这个靠不靠谱啊喂).会更新的.嗯. 1000-1029 1000 A+B problem (这个还需要一句话吗?). 1001 狼抓兔 ...

  5. BZOJ 一句话题解

    菜鸡刷题记录 [题号:题解] 1008:简单排列组合 #include <bits/stdc++.h> using namespace std; #define ll long long ...

  6. BZOJ 4868-4873 题解

    BZOJ4868 每个结束位置的最优值很显然具有单调性,三分,再讨论一下就好了. #include<bits/stdc++.h> using namespace std; #define ...

  7. Meet in the middle算法总结 (附模板及SPOJ ABCDEF、BZOJ4800、POJ 1186、BZOJ 2679 题解)

    目录 Meet in the Middle 总结 1.算法模型 1.1 Meet in the Middle算法的适用范围 1.2Meet in the Middle的基本思想 1.3Meet in ...

  8. 洛谷3067 BZOJ 2679题解(折半搜索)

    传送门 BZOJ传送门(权限题) 看到n小于20,就可以想到搜索 所有的数要么在集合a中,要么在集合b中,要么都不在 可是3^n复杂度会炸,我们考虑优化 可以利用折半搜索,将前面一半的所有可能情况与后 ...

  9. BZOJ 2048 题解

    2048: [2009国家集训队]书堆 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1076  Solved: 499[Submit][Status ...

  10. BZOJ 1034 题解

    1034: [ZJOI2008]泡泡堂BNB Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2613  Solved: 1334[Submit][St ...

随机推荐

  1. ansible系列(35)--ansible实战之部署WEB集群架构(5)

    目录 1. 整体测试 1.1 运行playbook 1.2 出口路由器防火墙规则设置 1.3 访问测试 1. 整体测试 1.1 运行playbook playbook的整体运行过程如下(因为之前都运行 ...

  2. LVS负载均衡(4)-- LVS FWM防火墙标记

    防火墙标记的作用是:借助于防火墙标记来分类报文,然后基于标记定义集群服务:可将多个不同的应用使用同一个集群服务进行调度. 实现方法: 在Director主机打标记,作用在mangle表的PREROUT ...

  3. 数据转换3-航拍的osgb格式数据转成3dtile格式

    选择的是包含所有 osgb 文件夹的 Data 文件 文件添加成功之后,空间参考,零点坐标等会根据文件自动生成,需要更改点击设置选择即可 存储类型:选择"散列",如果没有注意到,C ...

  4. selenium Webdriver版本和浏览器版本不匹配问题:ChromeDriver only supports Chrome version 119 Current browser version is 124.0.6367.202

    问题描述 代码如下: from selenium import webdriver from selenium.webdriver.common.by import By def test01(): ...

  5. 推荐一款微信公众平台Python开发神器!

    1.引言 在当今数字化时代,微信公众平台成为了企业和个人连接用户的重要渠道.为了高效地管理和与用户互动,开发者需要一个强大而灵活的工具. Weixin-Python 正是这样一个为微信公众平台量身打造 ...

  6. mongodb的备份与恢复详解

    简单 Mongodb导出与导入 1: 导入/导出可以操作的是本地的mongodb服务器,也可以是远程的.所以,都有如下通用选项:-h host 主机--port port 端口-u username ...

  7. 基于Python实现MapReduce

    一.什么是MapReduce 首先,将这个单词分解为Map.Reduce. Map阶段:在这个阶段,输入数据集被分割成小块,并由多个Map任务处理.每个Map任务将输入数据映射为一系列(key, va ...

  8. XML Schema 复杂元素类型详解:定义及示例解析

    在XML Schema(XSD)中,复杂元素是指包含其他元素和/或属性的XML元素.复杂元素可以分为四种类型: 空元素: 仅包含其他元素和/或属性的元素. 仅包含其他元素的元素: 不包含文本内容,只包 ...

  9. T2T-ViT:更多的局部结构信息,更高效的主干网络 | ICCV 2021

    论文提出了T2T-ViT模型,引入tokens-to-token(T2T)模块有效地融合图像的结构信息,同时借鉴CNN结果设计了deep-narrow的ViT主干网络,增强特征的丰富性.在ImageN ...

  10. 当面试官问出“Unsafe”类时,我就知道这场面试废了,祖坟都能给你问出来!

    一.写在开头 依稀记得多年以前的一场面试中,面试官从Java并发编程问到了锁,从锁问到了原子性,从原子性问到了Atomic类库(对着JUC包进行了刨根问底),从Atomic问到了CAS算法,紧接着又有 ...