BZOJ 1461 题解
考虑设计一个哈希函数 \(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 题解的更多相关文章
- BZOJ 1461: 字符串的匹配
Description 同上题. Sol KMP+树状数组. 写这题的时候我灰常naive...不管了...直接贴代码... Code /******************************* ...
- BZOJ 3732 题解
3732: Network Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= 30,000) ...
- bzoj 2669 题解(状压dp+搜索+容斥原理)
这题太难了...看了30篇题解才整明白到底咋回事... 核心思想:状压dp+搜索+容斥 首先我们分析一下,对于一个4*7的棋盘,低点的个数至多只有8个(可以数一数) 这样的话,我们可以进行一个状压,把 ...
- bzoj一句话题解
发现好多人都在搞这个...本人也想来试试(Solved刚到70就搞这个靠不靠谱啊喂).会更新的.嗯. 1000-1029 1000 A+B problem (这个还需要一句话吗?). 1001 狼抓兔 ...
- BZOJ 一句话题解
菜鸡刷题记录 [题号:题解] 1008:简单排列组合 #include <bits/stdc++.h> using namespace std; #define ll long long ...
- BZOJ 4868-4873 题解
BZOJ4868 每个结束位置的最优值很显然具有单调性,三分,再讨论一下就好了. #include<bits/stdc++.h> using namespace std; #define ...
- 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 ...
- 洛谷3067 BZOJ 2679题解(折半搜索)
传送门 BZOJ传送门(权限题) 看到n小于20,就可以想到搜索 所有的数要么在集合a中,要么在集合b中,要么都不在 可是3^n复杂度会炸,我们考虑优化 可以利用折半搜索,将前面一半的所有可能情况与后 ...
- BZOJ 2048 题解
2048: [2009国家集训队]书堆 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1076 Solved: 499[Submit][Status ...
- BZOJ 1034 题解
1034: [ZJOI2008]泡泡堂BNB Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2613 Solved: 1334[Submit][St ...
随机推荐
- 如何使用go module导入本地包
go module是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具. 到今天Go1.14版本推出之后Go modules 功能 ...
- String.split()遇到空字符串不解析的情况
1.split的api说明 stringObj.split([separator,[limit]]) stringObj:要被分解的 String separator:字符串或正则表达式对象 limi ...
- MAPREDUCE实践篇
1.编程规范 (1)用户编写的程序分成三个部分:Mapper,Reducer,Driver(提交运行mr程序的客户端) (2)Mapper的输入数据是KV对的形式(KV的类型可自定义) (3)Mapp ...
- 基本base样式
/* 去除常见标签默认的 margin 和 padding */ body, h1, h2, h3, h4, h5, h6, p, ul, ol, li, dl, dt, dd, input { ma ...
- snmpwalk命令详解
snmp安装 yum -y install net-snmp-libs net-snmp net-snmp-utils 系统镜像里面就有这些包.可yum安装 snmpwalk集合 snmpwalk + ...
- FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器
AVS3是中国AVS工作组制定的第三代音视频编解码技术标准,也是全球首个已推出的面向8K及5G产业应用的视频编码标准.AVS工作组于2019年3月9日完成第三代AVS视频标准(AVS3)基准档次的制 ...
- T2T-ViT:更多的局部结构信息,更高效的主干网络 | ICCV 2021
论文提出了T2T-ViT模型,引入tokens-to-token(T2T)模块有效地融合图像的结构信息,同时借鉴CNN结果设计了deep-narrow的ViT主干网络,增强特征的丰富性.在ImageN ...
- Sass预处理器 常见函数的基本使用
Sass提供了许多内置模块,其中包含有用的函数(以及mixin).这些模块可以像任何用户定义的样式表一样使用@use规则加载,它们的函数可以像任何其他模块成员一样调用.所有内置模块URL都以sass开 ...
- Windows中实现将bat或exe文件作为服务_且实现命令行安装、配置、启动、删除服务
一.背景描述 在Windows环境下进行日常的项目开发过程中,有时候需要将bat文件或exe文件程序注册为Windows的服务实现开机自己运行(没有用户登陆,服务在开机后也可以照常运行).且对于那些没 ...
- opensuse tw快速部署
使用GUI快速配置opensusetw 先看官方配置指南 换源 清华源之oss+non-oss links 清华源之packman links sudo zypper ar -cfg 'https:/ ...