对于每个位置求出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. IOS AFNetworking

    http://www.coneboy.com/?p=716 AFNetworking 使用总结 (用法+JSON解析) 2013 年 4 月 11 日  No comments Article 这几天 ...

  2. ruby实现简易计算器

    (这些文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) 回到家里,用的还是windows系统,ruby的编辑器换成了Aptana Studio 3 p ...

  3. Android创建桌面快捷图标

    <!-- 添加快捷方式 --> <uses-permission android:name="com.android.launcher.permission.INSTALL ...

  4. Mysql增删改

    改 UPDATE tbl_name SET 字段名=值,...[WHERE 条件][ORDER BY 字段名称][LIMIT限制条数] --更新用户名为4位的用户,让其以有年龄-3 UPDATA SE ...

  5. [ruby on rails] 跟我学之(2)HelloWorld

    1. 创建工程 rails new blog 2.查看下文件结构 tree 输出如下,请留意红圈中的部分. Gemfile, 用来管理应用程序的gems, 有点类似于python的包,有专门的网站来查 ...

  6. Linux 系统安全 抵御TCP的洪水

    抵御TCP的洪水 分类: LINUX tcp_syn_retries :INTEGER默认值是5对 于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃.不应该大于255,默认值是5,对应于1 ...

  7. js 实现图片预加载 (js操作 Image对象属性complete ,事件onload 异步加载图片)

    通过js操纵DOM很多情况下都是为了实现和当前页html元素的异步载入,我谈谈对Image对象的一些认识.看个例子:<input type="button" name=&qu ...

  8. Bitwise AND of Numbers Range

    Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers ...

  9. Compare Strings

    Compare two strings A and B, determine whether A contains all of the characters in B. The characters ...

  10. sharepoint添加应用程序