题目链接

参考了 神仙yyb的博客

现在发现kmp不仅能匹配字符串,还可以用于处理任意模式匹配中的状态,如这题中已经匹配的序列中的数的大小关系就是一种状态,使用kmp找到模式序列的每一个前缀的border,即一个最长的前缀和后缀使得它们的数字大小关系相同,即匹配状态相同,然后在失配时跳转到一个前缀的状态继续匹配,就可以解决这个问题啦!

代码:

 #include<bits/stdc++.h>
using namespace std;
#define N 1000007
int sum[N],n,m;
void modify(int x,int d)
{
for(;x<=m;x+=x&-x)
sum[x]+=d;
}
int query(int x)
{
int ans=;
for(;x;x-=x&-x)
ans+=sum[x];
return ans;
}
int read()
{
char c;
int x;
while((c=getchar())<||c>);
x=c-;
while((c=getchar())>=&&c<=)
x=x*+c-;
return x;
}
int rk[N],nxt[N],a[N],b[N],p[N];
vector<int> ans;
int main()
{
int i;
scanf("%d%d",&n,&m);
for(i=;i<=n;i++)
p[read()]=i;
for(i=;i<=n;i++)
{
modify(p[i],);
rk[i]=query(p[i]);
}
memset(sum,,sizeof(sum));
nxt[]=;
int last=;
for(i=;i<=n;i++)
{
int len=nxt[i-];
while(len&&query(p[i])+!=rk[len+])
{
len=nxt[len];
while(last<i-len)modify(p[last++],-);
}
if(query(p[i])+==rk[len+])
{
nxt[i]=len+;
modify(p[i],);
}
else nxt[i]=;
}
for(i=;i<=m;i++)
a[i]=b[i]=read();
sort(b+,b+m+);
for(i=;i<=m;i++)a[i]=lower_bound(b+,b+m+,a[i])-b;
memset(sum,,sizeof(sum));
int len=;
last=;
for(i=;i<=m;i++)
{
while(len&&query(a[i])+!=rk[len+])
{
len=nxt[len];
while(last<i-len)modify(a[last++],-);
}
if(query(a[i])+==rk[len+])
{
len++;
modify(a[i],);
if(len==n)ans.push_back(i-len+);
}
else len=;
}
int s=ans.size();
printf("%d\n",s);
for(i=;i<s;i++)
printf("%d ",ans[i]);
printf("\n");
return ;
}

LOJ2507 CEOI2011 Matching的更多相关文章

  1. 【LOJ#2507】[CEOI2011]Matching(KMP,树状数组)

    [LOJ#2507][CEOI2011]Matching(KMP,树状数组) 题面 LOJ 题解 发现要做的是排名串的匹配. 然后我们考虑把它转成这个位置之前有多少个数小于当前这个数,这样子只要每个位 ...

  2. luoguP4696 [CEOI2011]Matching KMP+树状数组

    可以非常轻易的将题意转化为有多少子串满足排名相同 注意到$KMP$算法只会在当前字符串的某尾添加和删除字符 因此,如果添加和删除后面的字符对于前面的字符没有影响时,我们可以用$KMP$来模糊匹配 对于 ...

  3. @loj - 2507@ 「CEOI2011」Matching

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 对于整数序列 \((a_1, a_2, ..., a_n)\) ...

  4. 学习《Hardware-Efficient Bilateral Filtering for Stereo Matching》一文笔记。

    个人收藏了很多香港大学.香港科技大学以及香港中文大学里专门搞图像研究一些博士的个人网站,一般会不定期的浏览他们的作品,最近在看杨庆雄的网点时,发现他又写了一篇双边滤波的文章,并且配有源代码,于是下载下 ...

  5. LeetCode题解-----Wildcard Matching

    题目描述: '?' Matches any single character. '*' Matches any sequence of characters (including the empty ...

  6. cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'mvc:annotation-driven'.

    spring 配置文件报错报错信息:cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be ...

  7. [LeetCode] Wildcard Matching 外卡匹配

    Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. ...

  8. [LeetCode] Regular Expression Matching 正则表达式匹配

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...

  9. Beginning Scala study note(5) Pattern Matching

    The basic functional cornerstones of Scala: immutable data types, passing of functions as parameters ...

随机推荐

  1. Axios构造函数学习笔记

    Axios 构造函数 lib/core/axios.js ... var intercaptorManager = require(./IntercaptorManger); var dispatch ...

  2. 微信小程序起步

    微信小程序 文档 微信小程序开发文档 本质 so微信小程序到底是什么?是原生的app还是H5应用? 简单来说,小程序是一种应用,运行的环境是微信(App)进程中,使用了部分的H5技术 目录介绍 app ...

  3. JSON.parse() 与 JSON.stringify()

    JSON.parse() 方法用来解析JSON字符串,构造由字符串描述的JavaScript值或对象.提供可选的reviver函数用以在返回之前对所得到的对象执行变换(操作). 语法 JSON.par ...

  4. 如何打造难用,bug多的产品

    本文纯属吐槽,如有雷同,绝非巧合.长期更新,欢迎一起吐槽. 没有产品规划 需求方提出需求后,直接开发,无需经过产品规划,用开发的思维搞出来!于是我们得到了一堆功能的集合.这个集合可以让刚上手的新用户一 ...

  5. C语言语法教程-结构体

    2018-09-30 结构体中成员变量地址是连续的,结构体用于描述记录. Create a struct //---------------------------- //struct1.c //创建 ...

  6. spring根据beanName获取bean

    spring根据beanName获取bean主要实现: org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean( ...

  7. ThinkPHP各个目录是什么含义ThinkPHP怎么安装和使用

    最近kdchxue看完了smarty之后,想学习下框架,于是乎就选择了ThinkPHP,听说这个框架简单易用,另外还是国产的!所以kdchxue毫不犹豫的就选择了ThinkPHP 了!下面看看Thin ...

  8. P2995 [USACO10NOV]牛的照片(树状数组,逆序对)

    题目: P2995 [USACO10NOV]牛的照片Cow Photographs P4545 [USACO10NOV]奶牛的图片Cow Photographs SP7809 COWPIC - Cow ...

  9. android studio学习----构建(gradle )依赖时使用动态依赖的问题

    今天在看Dan Lew大神的博客发现最新的文章就是 “Don't use dynamic versions for your dependencies” Everyone, please, to st ...

  10. 03篇ELK日志系统——升级版集群之ELK日志系统整合springboot项目

    [ 前言:整个ELK日志系统已经搭建好了,接下来的流程就是: springboot项目中的logback日志配置通过tcp传输,把springboot项目中所有日志数据传到————>logsta ...