题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3207

题意:给出一个数列,若干询问。每个询问查询[L,R]区间内是否存在某个长度为K的子数列(连续的)。

思路:将长度为K的每个子数列哈希成一个值,将查询也哈希成一个值,建立函数式线段树,然后对于查询[L,R],查询个数是否大于0。

int n,m,K,a[N];
int st[N],ed[N];
u64 b[N],bNum;
u64 p[N],q[N];

u64 getHash(int L,int R)
{
    u64 ans=0;
    int i;
    for(i=L;i<=R;i++) ans=ans*107+a[i];
    return ans;
}

struct node
{
    int L,R,a,b,s;
};

node tree[N<<4];
int root[N],tot;

int build(int a,int b)
{
    int k=++tot;
    tree[k].a=a;
    tree[k].b=b;
    tree[k].s=0;
    int mid=(a+b)>>1;
    if(a!=b)
    {
        tree[k].L=build(a,mid);
        tree[k].R=build(mid+1,b);
    }
    return k;
}

int insert(int p,int x)
{
    int k=++tot;
    tree[k]=tree[p];
    tree[k].s++;
    if(tree[k].a==x&&tree[k].b==x) return k;
    int mid=(tree[k].a+tree[k].b)>>1;
    if(x<=mid) tree[k].L=insert(tree[p].L,x);
    else tree[k].R=insert(tree[p].R,x);
    return k;
}

int get(int p,int x)
{
    if(tree[p].a==tree[p].b) return tree[p].s;
    int mid=(tree[p].a+tree[p].b)>>1;
    if(x<=mid) return get(tree[p].L,x);
    else get(tree[p].R,x);
}

int main()
{
    RD(n,m,K);
    int i;
    FOR1(i,n) RD(a[i]);
    bNum=n-K+1;
    FOR1(i,bNum) p[i]=b[i]=getHash(i,i+K-1);
    int j,x;
    u64 t;
    FOR1(i,m)
    {
        RD(st[i],ed[i]); ed[i]=ed[i]-K+1;
        t=0;
        FOR1(j,K) RD(x),t=t*107+x;
        q[i]=b[++bNum]=t;
    }
    sort(b+1,b+bNum+1);
    root[0]=build(1,bNum);
    FOR1(i,n-K+1)
    {
        a[i]=lower_bound(b+1,b+bNum+1,p[i])-b;
        root[i]=insert(root[i-1],a[i]);
    }
    FOR1(i,m)
    {
        x=lower_bound(b+1,b+bNum+1,q[i])-b;
        if(get(root[ed[i]],x)-get(root[st[i]-1],x)>0) puts("No");
        else puts("Yes");
    }
}

BZOJ 3207 花神的嘲讽计划Ⅰ(函数式线段树)的更多相关文章

  1. BZOJ 3207: 花神的嘲讽计划Ⅰ( hash + 可持久化线段树 )

    O(NK)暴力搞出所有子串的哈希值, 然后就对哈希值离散化建权值线段树, 就是主席树的经典做法了.总时间复杂度O(NK+(N+Q)logN) ----------------------------- ...

  2. bzoj 3207 花神的嘲讽计划Ⅰ 主席树+hash

    花神的嘲讽计划Ⅰ Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3112  Solved: 1086[Submit][Status][Discuss] ...

  3. [BZOJ 3207] 花神的嘲讽计划Ⅰ【Hash + 可持久化线段树】

    题目链接:BZOJ - 3207 题目分析 先使用Hash,把每个长度为 k 的序列转为一个整数,然后题目就转化为了询问某个区间内有没有整数 x . 这一步可以使用可持久化线段树来做,虽然感觉可以有更 ...

  4. bzoj 3207: 花神的嘲讽计划Ⅰ

    Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: "哎你傻不傻的![hqz:大笨J]" "这道题又被J屎过了!!" "J这程序 ...

  5. bzoj 3207 花神的嘲讽计划Ⅰ(哈希法+主席树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3207 [题意] 给定一个文本串,多次询问K长的模式串是否在文本[l,r]区间内出现. ...

  6. BZOJ 3207: 花神的嘲讽计划Ⅰ(莫队+哈希)

    传送门 解题思路 刚开始写了个莫队+哈希+\(map\)的\(O(n\sqrt(n)log(n)\)的辣鸡做法,\(T\)飞了.后来看了看别人博客发现其实并不用拿\(map\)当桶存那些哈希值.因为只 ...

  7. 【BZOJ3207】花神的嘲讽计划Ⅰ Hash+主席树

    [BZOJ3207]花神的嘲讽计划Ⅰ Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: “哎你傻不傻的![hqz:大笨J]” “这道题又被J屎过了!!” “J这程序怎么跑这么快 ...

  8. 【BZOJ】【3207】花神的嘲讽计划 I

    字符串Hash+可持久化线段树 好神奇的转化…… 蒟蒻一开始还去想AC自动机去了……然而由于a[i]的范围是小于等于n,怎么也想不出一个时间复杂度合理的方法 膜拜了题解0.0原来是字符串Hash! 首 ...

  9. 【BZOJ3207】花神的嘲讽计划I 可持久化线段树/莫队

    看到题目就可以想到hash 然后很自然的联想到可持久化权值线段树 WA:base取了偶数 这道题还可以用莫队做,比线段树快一些 可持久化线段树: #include<bits/stdc++.h&g ...

随机推荐

  1. H5不能少的功能-滑动分页

    // 滑动分页 $(window).scroll(function() {                   var mayLoadContent = $(window).scrollTop() & ...

  2. 微软职位内部推荐-Principal Dev Manager

    微软近期Open的职位: Title: Principal Dev Manager Location: Beijing The R&D of Shared Data Platform at S ...

  3. Oracle 存储过程实例

    create or replace procedure PCREPORT is startDate DATE; --起始如期 nowTime DATE; --当前日期 nowTime2 DATE; - ...

  4. 打造自己的程序员品牌(摘自Infoq)

    John Sonmez是Simple Programmer的创始人.作者与程序员,关注于如何让复杂的事情变得简单.他是一位专业的软件开发者.架构师与讲师,感兴趣的领域包括测试驱动开发.如何编写整洁的代 ...

  5. android开发之socket快传文件以及消息返回

    应用场景: 两台android机器:一台自建wifi热点,另一台搜索到,连接该wifi热点.之后再通过socket传递消息,文件等,当服务器端接收到消息之后会返回对应的应答消息: 注意点:接收到消息之 ...

  6. CSS去除Chrome浏览器的控件默认样式

    html的input输入框在Chrome浏览器里是有默认样式的,当它获得焦点时,即使你没有为它设置:focus时的样式,Chrome浏览器还是会给它加上蓝色的边框,今天百度找到有个方法可以去除该默认样 ...

  7. oracle 建立主键与索引【转】

    此文转自:http://blog.sina.com.cn/s/blog_439f80c4010094n1.html 创建主键: alter table T add primary key (V) T是 ...

  8. Ext学习-HelloWorld以及基础环境搭建

    1.目的    在eclipse中搭建EXTJS的基础环境,学习如何按照从官方下载的代码中搭建新的Extjs工程 2.主要包含内容:   1.ExtJS文件下载以及目录说明   2.ExtJS开发环境 ...

  9. 使用maven多模块来构建系统时,spring初始化报错的问题

    最近在实验maven结构的maven工程时,碰到一个问题,springbean总是初始化失败: Related cause: org.springframework.beans.factory.Uns ...

  10. [vijos 1770]大内密探

    描述 在古老的皇宫中,有N个房间以及N-1条双向通道,每条通道连接着两个不同的房间,所有的房间都能互相到达.皇宫中有许多的宝物,所以需要若干个大内密探来守护.一个房间被守护当切仅当该房间内有一名大内密 ...