https://loj.ac/problem/6062

直接套用霍尔定理。

由于A有多个选择,考虑维护B是否合法。

首先B数组的顺序显然是没有用的,可以直接排序。

然后每个A就都变成了向一个后缀连边。

对于B,原本需要check每一个集合是否满足|u|<=|v|

但实际上,只需要考虑最可能导致不合法的条件,也就是让等式右边保持不变的情况下,左边尽可能的大,如果还合法,就可以判定合法。

对于B,显然对于i<j,一定有F【i】<F【j】,F数组是B在A能匹配到的个数。

因此,需要check的只是B的一些前缀。

因此,我们只需要是每一个位置都满足i<=F【i】即可。

移项一下,F【i】- i >=0 因此,只需要维护F【i】- 的最小值即可。

由于A在不断变化,每次变化是对F数组的一个区间修改,线段树维护即可。

#include<bits/stdc++.h>
#define N 220000
#define eps 1e-7
#define inf 1e9+7
#define db double
#define ll long long
#define ldb long double
using namespace std;
inline ll read()
{
char ch=0;
ll x=0,flag=1;
while(!isdigit(ch)){ch=getchar();if(ch=='-')flag=-1;}
while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*flag;
}
struct Segment_Tree
{
#define lson o<<1
#define rson o<<1|1
#define mid ((l+r)>>1)
ll minv[N*4],addv[N*4];
inline void pushup(ll o){minv[o]=min(minv[lson],minv[rson]);}
inline void pushdown(ll o)
{
addv[lson]+=addv[o];minv[lson]+=addv[o];
addv[rson]+=addv[o];minv[rson]+=addv[o];
addv[o]=0;
}
void build(ll o,ll l,ll r)
{
addv[o]=0;if(l==r){minv[o]=-l;return;}
build(lson,l,mid);build(rson,mid+1,r);pushup(o);
}
void optset(ll o,ll l,ll r,ll ql,ll qr,ll k)
{
if(ql>qr)return;
if(ql<=l&&r<=qr){addv[o]+=k,minv[o]+=k;return;}
pushdown(o);
if(ql<=mid)optset(lson,l,mid,ql,qr,k);
if(qr>mid)optset(rson,mid+1,r,ql,qr,k);
pushup(o);
}
ll query(){return minv[1];}
#undef lson
#undef rson
#undef mid
}T;
ll n,m,k,ans,a[N],b[N];
void update(ll x,ll flag)
{
ll l=1,r=m+1,mid;
while(l<r){mid=(l+r)>>1;if(x+b[mid]<k)l=mid+1;else r=mid;}
T.optset(1,1,m,l,m,flag);
}
int main()
{
n=read();m=read();k=read();ans=0;
for(ll i=1;i<=m;i++)b[i]=read();for(ll i=1;i<=n;i++)a[i]=read();
sort(b+1,b+m+1);T.build(1,1,m);for(ll i=1;i<m;i++)update(a[i],+1);
for(ll i=1;i<=n-m+1;i++)update(a[i+m-1],+1),ans+=(T.query()>=0),update(a[i],-1);
printf("%lld\n",ans);
return 0;
}

loj6062 pair的更多相关文章

  1. 【LOJ6062】「2017 山东一轮集训 Day2」Pair(线段树套路题)

    点此看题面 大致题意: 给出一个长度为\(n\)的数列\(a\)和一个长度为\(m\)的数列\(b\),求\(a\)有多少个长度为\(m\)的子串与\(b\)匹配.数列匹配指存在一种方案使两个数列中的 ...

  2. LOJ6062「2017 山东一轮集训 Day2」Pair(Hall定理,线段树)

    题面 给出一个长度为 n n n 的数列 { a i } \{a_i\} {ai​} 和一个长度为 m m m 的数列 { b i } \{b_i\} {bi​},求 { a i } \{a_i\} ...

  3. c++ pair 使用

    1. 包含头文件: #include <utility> 2. pair 的操作: pair<T1,T2> p; pair<T1,T2> p(v1,v2); pai ...

  4. 论Pair的重要性

    这些天我在用React和D3做图表,从已经实现的图表里复制了一些坐标轴的代码,发现坐标轴上的n个点里,只有第一个点下面能渲染出文字提示,其余点下面都无法渲染出文字. 和组里的FL一起百思不得其解好几天 ...

  5. 2016 ACM/ICPC Asia Regional Dalian Online 1010 Weak Pair dfs序+分块

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...

  6. pair的使用

    #include<iostream> #include<cmath> #include<cstdio> #include<algorithm> #inc ...

  7. 【C++】pair

    STL的pair,有两个值,可以是不同的类型. template <class T1, class T2> struct pair; 注意,pair在头文件utility中,不要inclu ...

  8. hackerrank Similar Pair

    传送门 Problem Statement You are given a tree where each node is labeled from 1 to n. How many similar ...

  9. uva12546. LCM Pair Sum

    uva12546. LCM Pair Sum One of your friends desperately needs your help. He is working with a secret ...

随机推荐

  1. Android架构篇--MVP模式的介绍篇

    摘要: 在MVVM成熟之前MVP模式在Android上有被神化的趋势,笔者曾经在商业项目中从零开始大规模采用过MVP模式对项目进行开发.在使用MVP模式进行开发的时候发现项目的结构模式对开发是有一定的 ...

  2. Django中使用bookstarp框架(4)

    Django中使用bookstarp框架(4) 注意:要使用bookstarp框架前,要先有css的基础 因为主要是研究后台的使用方法,就引入前端的框架,简化html上的耗时(主要是不想把时间浪费在前 ...

  3. (网页)angular中实现li或者某个元素点击变色的两种方法(转)

    转自脚本之家: 本篇文章主要介绍了angular中实现li或者某个元素点击变色的两种方法,非常具有实用价值,需要的朋友可以参考下 本文介绍了angular中实现li或者某个元素点击变色的两种方法,分享 ...

  4. JavaScript大杂烩2 - 理解JavaScript的函数

    JavaScript中的字面量 书接上回,我们已经知道在JavaScript中存在轻量级的string,number,boolean与重量级的String,Number,Boolean,而且也知道了之 ...

  5. python第四天 三级菜单新思路

    今天是一个坎,在做三级菜单时卡住了,因为想要简洁的代码,就要用到递归函数,卡的不要不要的!不过最后在同学老师的提点帮助下,还是解决了! 2017-5-10发现之前的代码有BUG今天 修改了! 作业要求 ...

  6. 转:更改SQLServer实例默认字符集

    需求 安装数据库时,将字符集安装成了“SQL_Latin1_General_CP1_CI_AS”,现在需要将其更改为“Chinese_PRC_CI_AS”.   方法 重新生成系统数据库 ,然后还原配 ...

  7. Django框架的使用教程--mysql数据库[三]

    Django的数据库 1.在Django_test下的view.py里面model定义模型 from django.db import models # Create your models here ...

  8. 三种方法更改MAC OS X下的HOSTS文件

    1.终端更改 用程序里面打开终端(terminal),输入 sudo vi /etc/hosts 然后提示输入系统密码 hosts文件就自动打开了 接着输入 i 进入编辑模式 将添加的网站,ip拷贝进 ...

  9. 【2017下集美大学软工1412班_助教博客】团队作业7——第二次项目冲刺(Beta阶段)成绩公示

    作业要求 团队作业7 团队评分结果 Beta计划 Total GN SX GJ LC AP WT PHILOSOPHER 3 1 0 1.5 0 0.5 0 三人行 3.5 1 1 1 0 0.5 0 ...

  10. javascript 正则表达式学习

    正则表达式 正则表达式,一个描述字符模式的对象.javascript的RegExp类表示正则表达式,String和RegExp都定义了方法,后者使用正则表达式进行强大的模式和匹配与替换功能. -- f ...