2015-09-28 14:11:36 by opas

这题给的是一个字符串 把其中一些子串给取出来 判断是否是周期为d的字符串  还需要把 其中的一个区间完全变成一个数 ,然后在查询,我们把每个字符串进行hash 不管结果怎么样hash 然后进行区区间判断 。。 还是存在概率性的错误的

#include <algorithm>
#include <string.h>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long LL;
const int maxn=;
const LL mod0 =;
const LL mod1 =;
LL powd[][maxn],digitpow[][][maxn];
void init()
{
powd[][]=powd[][]=;
for(LL i=; i<=; i++)
{
powd[][i]=( powd[][i-] * )%mod0;
powd[][i]=( powd[][i-] * )%mod1; for(int j=; j<; j++)
{
digitpow[][j][i]=( digitpow[][j][i-]*+j )%mod0;
digitpow[][j][i]=( digitpow[][j][i-]*+j )%mod1;
}
}
}
char str[maxn];
struct Itree
{
LL mark[maxn*],v[][maxn*],ans[];
int cL,cR,num;
void maintain(int L, int R, int o)
{
int mid=(L+R)>>;
v[][o]=( v[][o*] * powd[][R-mid] + v[][o*+] )%mod0;
v[][o]=( v[][o*] * powd[][R-mid] + v[][o*+] )%mod1;
}
void build(int L, int R, int o)
{
mark[o]=-;
if(L==R){
v[][o]=v[][o]=str[L-]-''; return ;
}
int mid=(L+R)>>;
build(L,mid,o*);
build(mid+,R,o*+);
maintain(L,R,o);
}
void qper(int L, int R,int n, LL &ans0,LL &ans1)
{
cL=L;cR=R; ans[]=ans[]=;num=;
query(,n,);
ans0=ans[]; ans1=ans[];
}
void pushdown(int L, int R, int o)
{
if(mark[o]!=-)
{
int mid=(L+R)>>;
mark[o*]=mark[o*+]=mark[o]; v[][o*]=digitpow[][mark[o]][ mid-L+ ];
v[][o*]=digitpow[][mark[o]][ mid-L+ ]; v[][o*+]=digitpow[][mark[o]][ R-mid ];
v[][o*+]=digitpow[][mark[o]][ R-mid ]; mark[o]=-;
}
}
void query(int L, int R, int o)
{
if(cL<=L&&R<=cR)
{
ans[]=(ans[]*powd[][R-L+]+v[][o])%mod0;
ans[]=(ans[]*powd[][R-L+]+v[][o])%mod1;
return ;
}
pushdown(L,R,o);
int mid=(L+R)>>;
if(cL<=mid)query(L,mid,o*);
if(cR>mid)query(mid+,R,o*+);
}
void update(int L, int R, int o)
{
if(cL<=L&&R<=cR)
{
mark[o]=num;
v[][o]=digitpow[][num][R-L+];
v[][o]=digitpow[][num][R-L+];
return ;
}
pushdown(L,R,o);
int mid=(L+R)>>;
if(cL<=mid)update(L,mid,o*);
if(cR>mid)update(mid+,R,o*+);
maintain(L,R,o);
}
}T;
int main()
{
init();
int n,m,k;
while(scanf("%d%d%d",&n,&m,&k)==)
{
scanf("%s",str);
T.build(,n,);
m+=k;
while(m--){
int op,L,R,V;
scanf("%d%d%d%d",&op,&L,&R,&V); if(op==){
T.cL=L;T.cR=R; T.num=V;
T.update(,n,);
}else{
if((R-L+)<=V){
puts("YES");
}else
if( ( R - L + ) <= * V )
{ int len=R-L+-V;
LL a10,a11,a20,a21;
T.qper(L,L+len-,n,a10,a11);
T.qper(R-len+,R,n,a20,a21);
if(a10==a20&&a11==a21) puts("YES");
else puts("NO"); }else
{
if((R-L+)%V == ){
int d=(R-L+)/V;
int len = (d-)*V;
LL a10,a11,a20,a21;
T.qper(L,L+len-,n,a10,a11);
T.qper(R-len+,R,n,a20,a21);
if(a10==a20&&a11==a21) puts("YES");
else puts("NO");
}
else{
int d=(R-L+)/V;
int len = (d-)*V;
int tail=(R-L+)-V*d;
LL a10,a11,a20,a21;
T.qper(L,L+len-,n,a10,a11);
T.qper(L+V,L+V+len-,n,a20,a21);
if(a10==a20&&a11==a21) {
T.qper(L,L+tail-,n,a10,a11);
T.qper(R-tail+,R,n,a20,a21);
if(a10==a20&&a11==a21)
puts("YES");
else puts("NO");
}
else puts("NO"); }
} } }
}
return ;
}

E. Kefa and Watch hash 线段树的更多相关文章

  1. bzoj2124 等差子序列(hash+线段树)

    2124: 等差子序列 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 719  Solved: 261[Submit][Status][Discuss] ...

  2. HDU - 3973 AC's String(Hash+线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=3973 题意 给一个词典和一个主串.有两种操作,查询主串某个区间,问这主串区间中包含多少词典中的词语.修改主串某一 ...

  3. 【10.6校内测试】【小模拟】【hash+线段树维护覆盖序列】

    一开始看到题就果断跳到T2了!!没想到T2才是个大坑,浪费了两个小时QAQ!! 就是一道小模拟,它怎么说就怎么走就好了! 为什么要用这么多感叹号!!因为统计答案要边走边统计!!如果每个数据都扫一遍20 ...

  4. day 1 堆 hash 线段树 树状数组 冰茶姬 字典树 二叉查找树

    来郑州的第二天,早上开始也没说什么就说了些注意安全,各种各样的注意安全... 冰茶姬: 原来再打食物链时看了一下冰茶姬,只注意了路径压缩,没想到还有什么按秩排序但确实快了不少... int find( ...

  5. URAL 1890 . Money out of Thin Air (dfs序hash + 线段树)

    题目链接: URAL 1890 . Money out of Thin Air 题目描述: 给出一个公司里面上司和下级的附属关系,还有每一个人的工资,然后有两种询问: 1:employee x y z ...

  6. Codeforces Round #321 (Div. 2) E Kefa and Watch (线段树维护Hash)

    E. Kefa and Watch time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  7. 线段树---poj2528 Mayor’s posters【成段替换|离散化】

    poj2528 Mayor's posters 题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报 思路:这题数据范围很大,直接搞超时+超内存,需要离散化: 离散化简单的来说就是只取我们需要 ...

  8. Codeforces Round #321 (Div. 2) E. Kefa and Watch 线段树hash

    E. Kefa and Watch Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/580/prob ...

  9. 线段树 + 字符串Hash - Codeforces 580E Kefa and Watch

    Kefa and Watch Problem's Link Mean: 给你一个长度为n的字符串s,有两种操作: 1 L R C : 把s[l,r]全部变为c; 2 L R d : 询问s[l,r]是 ...

随机推荐

  1. Nessus离线安装及升级插件

    最近做客户的内网主机漏洞扫描,申请了一台内网主机做扫描服务器,安装Nessus.由于客户严格限制内网主机不能开通外网访问权限,折腾了一下Nessus离线激活和离线更新漏洞插件,详细过程截图记录. 一. ...

  2. 转:AOP与JAVA动态代理

    原文链接:AOP与JAVA动态代理 1.AOP的各种实现 AOP就是面向切面编程,我们可以从以下几个层面来实现AOP 在编译期修改源代码 在运行期字节码加载前修改字节码 在运行期字节码加载后动态创建代 ...

  3. python,re模块正则

    python没有正则需要导入re模块调用.正则表达式是为了匹配字符串,动态模糊的匹配,只要有返回就匹配到了, 没返回就没匹配到,前面是格式后面是字符串 最常用的匹配语法: re.match()#麦驰, ...

  4. Python摸爬滚打之day04----基本数据类型(列表,元组)

    1.列表 列表是可变的, 有序的数据类型,列表是按照添加顺序来保存的,可以存放各种数据类型. 1.1    列表的切片(同字符串) 1.2    列表的增删改查 注意: 列表是可以直接在列表上面进行操 ...

  5. Javascript 对象复制(深浅拷贝)

    一.数据类型分类: 基本变量 引用类型 二.什么叫做指针指向 栈内存.堆内存.指针指向(如下红圈圈的斜线). 三.赋值.拷贝.引用区别? 赋值指一个变量赋予某个值,包含两种方式,一种是直接量,另一种, ...

  6. 基于sendmail的简单zabbix邮件报警

    1.修改zabbix server hostname声明:在配置zabbix的Email报警之前,需要将sendmail使用的域名进行相应的修改,系统默认为localhost.localdomain, ...

  7. shell日志分析进阶篇

    前面我们说了shell分析日志常用指令,现在我们随ytkah一起看看shell日志分析进阶篇,假设日志文件为ytkah.log //统计不重复抓取数量 cat ytkah.log | awk '{pr ...

  8. 微信和WeChat合并月活跃数达8.89亿,移动支付月活跃账户超过6亿

    3月22日,腾讯公布2016年年度业绩报告,微信和WeChat合并月活跃用户数达8.89亿,同比增长28%:2016年12月,腾讯移动支付的月活跃账户及日均支付交易笔数均超过6亿.腾讯主席兼首席执行官 ...

  9. ACM-最短路之中的一个个人的旅行——hdu2066

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/lx417147512/article/details/27235809 ************** ...

  10. ros 运行rviz时出现 QXcbConnection: XCB error: 148 错误 解决方法

    出现上述问题的原因: 1.由于使用了nvc远程控制下位机: 2.rviz是一个基于opengl开发的图形插件,需要使用理论的屏幕参数(thetis' screen),由于使用了teamviewer会导 ...