CodeForces 213 E
/*
线段树 + hash:
首先我们可以知道A序列是1~n的排列,那么我们可以先在B序列中把1~n的排列找出来,看其相对位置是否与A相同(hash可做),相同即表明存在一个d满足条件。
以此类推,我们接下来可以把B中 2~ n + 1的排列找出来,如果其每位-1后相对顺序还是与A序列一致,即存在d-1也满足。。。
线段树中保存一个长度为n的序列的hash。具体看代码
*/
#include <bits/stdc++.h> using namespace std; #define lson l, m ,rt<<1
#define rson m + 1, r, rt <<1|1
const int maxn = 2e5 + ;
const int M = ;//hash底数
typedef long long ll;
int pw[maxn], s, h;
int n, m; int hash[maxn << ],sz[maxn << ];
void pushUp(int rt){
hash[rt] = hash[rt<<] * pw[sz[rt<<|]] + hash[rt<<|];
sz[rt] = sz[rt<<] + sz[rt<<|];
}
void update(int p, int val, int tag, int l, int r, int rt){
if (l == r){
hash[rt] += tag * val;
sz[rt] += tag;
return ;
}
int m = (l + r) >> ;
if (p <= m) update(p, val, tag, lson);
else update(p, val, tag, rson);
pushUp(rt);
}
int pos[maxn];
int main(){
int x;
while (~scanf("%d%d", &n, &m)){
pw[] = ;
h = s = ;
for (int i = ; i <= n; ++i){
scanf("%d", &x);
h = h * M + x;
pw[i] = pw[i - ] * M;//M的i次方
s += pw[i - ];//1 ~n的排列的hash转化成 2 ~ n + 1的hash需要+s.......自己算算
}
for (int i = ; i <= m; ++i){
scanf("%d", &x);
pos[x] = i;
}
memset(hash, , sizeof(hash));
memset(sz, , sizeof(sz));
int ans = ;
for (int i = ; i <= m; ++i){
update(pos[i], i, , , m, );
if (i >= n){
if ((hash[] - (s * (i - n)) == h))
ans++;
update(pos[i - n + ], i - n + , -, , m, );
}
}
printf("%d\n", ans);
}
return ;
}
CodeForces 213 E的更多相关文章
- Codeforces Round #213 (Div. 2) A. Good Number
#include <iostream> #include <vector> using namespace std; int main(){ ; cin >> n ...
- Codeforces Round #213 (Div. 2) B. The Fibonacci Segment
#include <iostream> #include <algorithm> #include <vector> using namespace std; in ...
- codeforces.com/problemset/problem/213/C
虽然一开始就觉得从右下角左上角直接dp2次是不行的,后面还是这么写了WA了 两次最大的并不一定是最大的,这个虽然一眼就能看出,第一次可能会影响第二次让第二次太小. 这是原因. 5 4 32 1 18 ...
- Codeforces Round #213 (Div. 1) B - Free Market 思维+背包 好题
B - Free Market 思路:这个题怎么说呢,迷惑性很大,题目里说了交换了两个集合的时候如果有相同元素不能交换,感觉如果没 这句话能很快写出来, 其实当交换的两个集合有重复元素的时候只要交换那 ...
- CodeForces比赛总结表
Codeforces A B C D ...
- CodeForces 445B DZY Loves Chemistry
DZY Loves Chemistry Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64 ...
- Codeforces Round #131 (Div. 1) B. Numbers dp
题目链接: http://codeforces.com/problemset/problem/213/B B. Numbers time limit per test 2 secondsmemory ...
- Codeforces 364A - Matrix
原题地址:http://codeforces.com/problemset/problem/364/A 题目大意: 给定一个数字a(0 ≤ a ≤ 109)和一个数列s(每个数都是一位,长度不超过40 ...
- Codeforces Round #322 (Div. 2) D. Three Logos 暴力
D. Three Logos Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/581/problem ...
随机推荐
- 豆瓣电台笔记3:cell添加从中间向两侧放大的动画
步骤: 1.设置动画属性的初始值 cell.layer.transform = CATransform3DMakeScale(0.1,0.1,1) 2.在指定时间内执行动画 UIView.animat ...
- map方法,以及filter方法的使用
map()方法,会返回一个 jQuery 封装的数组, 这个数组不能直接使用,需要使用 get() 来处理返回的对象以得到基础的数组. 例子: <!DOCTYPE html> <ht ...
- Kubernetes使用prometheus+grafana做一个简单的监控方案
前言 本文介绍在k8s集群中使用node-exporter.prometheus.grafana对集群进行监控.其实现原理有点类似ELK.EFK组合.node-exporter组件负责收集节点上的me ...
- 【MyBatis学习06】输入映射和输出映射
在前面几篇博文的例子中也可以看到mybatis中输入映射和输出映射的身影,但是没有系统的总结一下,这篇博客主要对这两个东东做一个总结.我们知道mybatis中输入映射和输出映射可以是基本数据类型.ha ...
- springboot学习(五) 全局异常处理
创建全局异常处理 /** * 全局异常配置管理 */ @ControllerAdvice public class GlobalExceptionConfig extends ResponseEnti ...
- CentOS 7中mariadb编译安装教程systemctl启动
mariadb做为mysql的替代品 现在centos的新版本yum包已换成mariadb 跟上篇一样只是启动方式改为systemd 安装一些库 yum install gcc gcc-c++ wge ...
- vc2010, fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt解决办法
是因为安其它软件的时候更新了.net framework,导致vc2010出了问题. 解决办法是在系统里搜索cvtres.exe,会搜到很多,把其中 Microsoft Visual Studio 1 ...
- codeforces Round #Pi (div.2) 567ABCD
567A Lineland Mail题意:一些城市在一个x轴上,他们之间非常喜欢写信交流.送信的费用就是两个城市之间的距离,问每个城市写一封信给其它城市所花费的最小费用和最大的费用. 没什么好说的.直 ...
- Python脚本性能剖析
################### #Python脚本性能剖析 ################### cProfile/profile/hotshot用于统计Python脚本各部分运行频率和耗费 ...
- Android API Guides---OpenGL ES
OpenGL ES Android包含高性能2D和3D图形开放图形库(OpenGL®的).详细而言,OpenGL ES的API支持. OpenGL是一个跨平台的图形API.用于指定的3D图形处理硬件标 ...