/*
线段树 + 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的更多相关文章

  1. Codeforces Round #213 (Div. 2) A. Good Number

    #include <iostream> #include <vector> using namespace std; int main(){ ; cin >> n ...

  2. Codeforces Round #213 (Div. 2) B. The Fibonacci Segment

    #include <iostream> #include <algorithm> #include <vector> using namespace std; in ...

  3. codeforces.com/problemset/problem/213/C

    虽然一开始就觉得从右下角左上角直接dp2次是不行的,后面还是这么写了WA了 两次最大的并不一定是最大的,这个虽然一眼就能看出,第一次可能会影响第二次让第二次太小. 这是原因. 5 4 32 1 18 ...

  4. Codeforces Round #213 (Div. 1) B - Free Market 思维+背包 好题

    B - Free Market 思路:这个题怎么说呢,迷惑性很大,题目里说了交换了两个集合的时候如果有相同元素不能交换,感觉如果没 这句话能很快写出来, 其实当交换的两个集合有重复元素的时候只要交换那 ...

  5. CodeForces比赛总结表

    Codeforces A                     B                        C                             D            ...

  6. CodeForces 445B DZY Loves Chemistry

    DZY Loves Chemistry Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64 ...

  7. Codeforces Round #131 (Div. 1) B. Numbers dp

    题目链接: http://codeforces.com/problemset/problem/213/B B. Numbers time limit per test 2 secondsmemory ...

  8. Codeforces 364A - Matrix

    原题地址:http://codeforces.com/problemset/problem/364/A 题目大意: 给定一个数字a(0 ≤ a ≤ 109)和一个数列s(每个数都是一位,长度不超过40 ...

  9. 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 ...

随机推荐

  1. [TypeScript] Export public types from your library

    If you're a library author, it's useful to expose your public types as interfaces, to allow your con ...

  2. Node.js meitulu图片批量下载爬虫1.02版

    以前版本需要先查看网页源码,然后肉眼找到图片数量和子目录,虽说不费事,但多少有点不方便. 于是修改了一下,用cheerio自己去找找到图片数量和子目录,只要修改页面地址就行了.至此社会又前进了一步. ...

  3. BASE64Decoder的引用

    project---->properties--->Libraries--->JRE System Library--->Access rules--->Edit---& ...

  4. Swift学习-枚举(Enumerations)的使用方法

    Swift学习-枚举的使用方法 枚举的使用语法: enum someEnumer { // 枚举的成员值 } 以下是方向的一个例子: enum direction { case Up case Dow ...

  5. linux下使用tc(Traffic Control) 流量控制命令模拟网络延迟和丢包

    目录 TC案例 TC常用命令 TC安装 TC原理介绍 TC规则 TC操作原理 TC命名规则 TC单位 TC命令 TC案例 如何使用tc模拟网络延迟和丢包 修改网络延时:  sudo tc qdisc  ...

  6. 用户自定义类型《lua程序设计》 28章 笔记

    本实例实现一种很简单的类型------布尔数组.C语言可以实现将每个布尔值存储在一个bit中,从而减少内存用量. 必须的一些宏 Code Snippet #defineBITS_PER_WORD (C ...

  7. 【MyBatis学习01】宏观上把握MyBatis框架

    今天开始学习mybatis框架,博客主要记录学习过程中的一些总结,如有错误之处,欢迎留言指正~先用mybatis的鸟鸟来镇个楼,咳咳~~ mybatis框架是一个持久层框架,是Apache下的顶级项目 ...

  8. IP报文格式及各字段意义

    IP数据包由报头和数据两部分组成.报头的前一部分是固定长度,共20字节.在报头的固定部分的后面是可选部分——IP选项和填充域. 首部各字段的含义如下 1.版本      占4位,指IP协议的版本. 2 ...

  9. TortoiseSVN客户端使用方法

    SVN对于程序开发来说是非常重要的东西,它是非常不错的版本管理工具,下面介绍一下TortoiseSVN客户端的使用方法. 工具/原料 TortoiseSVN 方法/步骤   如果没有TortoiseS ...

  10. html5_websocket_tomcat8

    目录 前言 后端 浏览器前端 java的client 注意 前言 HTML5 WebSocket实现了服务器与浏览器的双向通讯,开销小,实时性高,常用于即时通讯和对信息实时性要求比较高的应用. 下面讲 ...