对于每个位置求出L[i]表示左边最大的j,满足从j开始到i-1中存在第一个子序列

R[i]表示右边最小的j,满足从j开始到i-1中存在第二个子序列

然后枚举颜色是相遇点的位置,如果L[i]左边、R[i]右边存在一样的颜色,则可行

#include<cstdio>
#define N 1000010
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
int n,k,m,l,i,j,t,a[N],c[N],nxt[N],loc[N],f[N],L[N],R[N],cnt[N],ret,ans;bool vis[N],can[N];
int main(){
read(n),read(k);
for(i=1;i<=n;i++)read(c[i]);
read(m),read(l);
for(i=1;i<=m;i++)read(a[i]);
for(i=m+l-1;i>=m;i--)read(a[i]);
for(i=1;i<=n;i++)loc[i]=n+1;
for(i=n;i;i--)nxt[i]=loc[c[i]],loc[c[i]]=i;
for(i=1;i<=n;i++){
L[i]=m>1?f[1]:i;
if(c[i]==a[m-1])for(f[m-1]=i,j=m-2;j;j--)while((t=f[j]?nxt[f[j]]:loc[a[j]])<f[j+1])f[j]=t;
}
for(i=1;i<=n;i++)loc[i]=0,f[i]=n+1;
for(i=1;i<=n;i++)nxt[i]=loc[c[i]],loc[c[i]]=i;
for(i=n;i;i--){
R[i]=l>1?f[m+l-1]:i;
if(c[i]==a[m+1])for(f[m+1]=i,j=m+2;j<m+l;j++)while((t=f[j]<=n?nxt[f[j]]:loc[a[j]])>f[j-1])f[j]=t;
}
for(i=1;i<=n;i++)if(L[i]>1&&R[i]<n){
for(j=n;j>R[i];j--)cnt[c[j]]++;
for(j=1;j<L[i];j++)if(!vis[c[j]]&&cnt[c[j]])vis[c[j]]=1,ret++;
if(ret&&c[i]==a[m])ans++,can[i]=1;
break;
}
for(i++;i<=n;i++){
if(R[i]>=n)break;
for(j=R[i];j>R[i-1];j--)if(!(--cnt[c[j]])&&vis[c[j]])ret--,vis[c[j]]=0;
for(j=L[i-1];j<L[i];j++)if(!vis[c[j]]&&cnt[c[j]])vis[c[j]]=1,ret++;
if(ret&&c[i]==a[m])ans++,can[i]=1;
}
printf("%d\n",ans);
for(i=1;i<=n;i++)if(can[i])printf("%d ",i);
return 0;
}

  

BZOJ3828 : [Poi2014]Criminals的更多相关文章

  1. [POI2014]Criminals

    题目大意: 给你一个长度为$n(n\le10^6)$的颜色序列,其中每个颜色互不相同.两个人$A$和$B$分别从某个点出发从左往右.从右往左任意地选择颜色,然后在中间的某一点相遇.分别给出两人所选择的 ...

  2. POI2014题解

    POI2014题解 [BZOJ3521][Poi2014]Salad Bar 把p当作\(1\),把j当作\(-1\),然后做一遍前缀和. 一个合法区间\([l,r]\)要满足条件就需要满足所有前缀和 ...

  3. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  4. BZOJ 3524: [Poi2014]Couriers [主席树]

    3524: [Poi2014]Couriers Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1892  Solved: 683[Submit][St ...

  5. BZOJ 3524: [Poi2014]Couriers

    3524: [Poi2014]Couriers Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1905  Solved: 691[Submit][St ...

  6. [BZOJ3872][Poi2014]Ant colony

    [BZOJ3872][Poi2014]Ant colony 试题描述 There is an entrance to the ant hill in every chamber with only o ...

  7. Codeforces Round #356 (Div. 2)B. Bear and Finding Criminals(水题)

    B. Bear and Finding Criminals time limit per test 2 seconds memory limit per test 256 megabytes inpu ...

  8. 【BZOJ】【3522】【POI2014】Hotel

    暴力/树形DP 要求在树上找出等距三点,求方案数,那么用类似Free Tour2那样的合并方法,可以写出: f[i][j]表示以 i 为根的子树中,距离 i 为 j 的点有多少个: g[i][j]表示 ...

  9. 【BZOJ】【3831】【POI2014】Little Bird

    DP/单调队列优化 水题水题水题水题 单调队列优化的线性dp…… WA了8次QAQ,就因为我写队列是[l,r),但是实际操作取队尾元素的时候忘记了……不怎么从队尾取元素嘛……平时都是直接往进放的……还 ...

随机推荐

  1. 解决php configure: error: Cannot find ldap libraries in /usr/lib.错误

    解决php configure: error: Cannot find ldap libraries in /usr/lib.错误 iitshare 分类:Linux,PHP,项目实施 | 标签:Ca ...

  2. pip 直接安装tar.gz zip文件包 (windows linux mac 可用)

    在不能连接外网的机器上安装python的各种包,解压安装要人工输入多条命令: tar -zxvf Flask-WTF-0.10.0.tar.gz cd Flask-WTF-0.10.0 python ...

  3. mysql 判空

    2013年9月10日 15:44:36 update `zzb_table` set status = 1 where `link` != ''; 不要用 update `zzb_table` set ...

  4. String解析

    常量池(Constant Pool):指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据.JVM虚拟机为每个被装载的类型维护一个常量池.常量池就是该类型所用到常量的一个有序集和,包括 ...

  5. AJAX省市县三级联动

    效果 开发结构参考AJAX,JSON用户校验 主要有两个核心文件 1,处理输入字符,进行后台搜索的servlet linkage.java package org.guangsoft.servlet; ...

  6. [Android Pro] RecyclerView实现瀑布流效果(二)

    referece to : http://blog.csdn.net/u010687392 在上篇中我们知道RecyclerView中默认给我们提供了三种布局管理器,分别是LinearLayoutMa ...

  7. ubuntu下设置Android手机驱动

    如果下面的文章不好使,建议读一这个文章:http://forum.xda-developers.com/xperia-u/general/howto-usb-connection-to-ubuntu- ...

  8. 配置SecureCRT连接本地虚拟机中的Linux系统

    转自:http://www.pythoner.com/196.html 由于平时公司开发时都是使用SecureCRT连接的Linux服务器,所以也想使用SecureCRT在自己电脑上连接本地虚拟机中的 ...

  9. Session的使用(登录例案+其它页面访问)

    本程序功能是使用Session将用户输入的用户名保存在Session中(登录成功情况下,登录失败不会有Session值),其它页面想访问时会先判断是否有之前存的Session值. 登录Login.ht ...

  10. Android开发之onClick事件的三种写法

    package a.a; import android.app.Activity; import android.os.Bundle; import android.view.View; import ...