BZOJ:4333: JSOI2012 智者的考验
4333: JSOI2012 智者的考验
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 68 Solved: 18
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
0 0 1
1 1 0
7 4
1 1 7
0 2 3
0 3 4
1 1 7
Sample Output
3
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MN 1000001
using namespace std; int read_p,read_ca;
inline int read(){
read_p=;read_ca=getchar();
while(read_ca<''||read_ca>'') read_ca=getchar();
while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
return read_p;
}
struct na{int c[],sum,l,r,y,a,Q,V;}t[MN<<];
int n,m,q,rx,ry,o[],s[],to[][],num=,bo,ro=,x,N[];
void build(int &p,int l,int r){
if (p==) p=++num,t[p].l=t[p].r=t[p].sum=t[p].y=,t[p].a=-;
t[p].c[N[]]=((r-l)>>)+(!(l&)||!(r&));
t[p].c[N[o[]]]=((r-l)>>)+((l&)||(r&));t[p].sum=((((r-l)>>)+((l&)||(r&)))&)*o[];
if (l==r) return;
int mid=l+r>>;
build(t[p].l,l,mid);build(t[p].r,mid+,r);
}
void pd(int p,int l,int r){
if (t[p].a!=-){
if (t[p].l) t[t[p].l].a=t[p].a,t[t[p].l].V=t[p].V,t[t[p].l].Q=t[p].Q,t[t[p].l].y=;
if (t[p].r) t[t[p].r].a=t[p].a,t[t[p].r].V=t[p].V,t[t[p].r].Q=t[p].Q,t[t[p].r].y=;
memset(t[p].c,,sizeof(t[p].c));
t[p].c[N[t[p].V]]=((r-l)>>)+(!(l-t[p].Q&)||!(r-t[p].Q&));
t[p].c[N[t[p].a^t[p].V]]=((r-l)>>)+((l-t[p].Q&)||(r-t[p].Q&));t[p].sum=((((r-l)>>)+((l-t[p].Q&)||(r-t[p].Q&)))&)*t[p].a^((r-l+&)*t[p].V);
t[p].a=-;
}
}
void up(int p,int l,int r){
int mid=l+r>>;
pd(t[p].l,l,mid);pd(t[p].r,mid+,r);
t[p].sum=t[t[p].l].sum^t[t[p].r].sum^(((mid-l+)&)*t[t[p].l].y)^(((r-mid)&)*t[t[p].r].y);
for (int i=;i<;i++) t[p].c[i]=t[t[p].l].c[N[s[i]^t[t[p].l].y]]+t[t[p].r].c[N[s[i]^t[t[p].r].y]];
}
void cg(int p,int l,int r,int po,int v){
if (po<=l) t[p].y^=v;else{
pd(p,l,r);
int mid=l+r>>;
cg(t[p].r,mid+,r,po,v);
if (mid>=po) cg(t[p].l,l,mid,po,v);
up(p,l,r);
}
}
int ask(int p,int l,int r,int po){
if (t[p].a!=-) return (t[p].a*(po-t[p].Q&))^t[p].V^t[p].y;
if (l==r) return t[p].sum^t[p].y;
int mid=l+r>>;
if (po<=mid) return ask(t[p].l,l,mid,po)^t[p].y;else return ask(t[p].r,mid+,r,po)^t[p].y;
}
int que(int p,int l,int r,int L,int R,int v){
pd(p,l,r);
v^=t[p].y;
if (L==l&&R==r) return t[p].c[N[v]];
int mid=l+r>>;
if (R<=mid) return que(t[p].l,l,mid,L,R,v);else
if (L>mid) return que(t[p].r,mid+,r,L,R,v);else
return que(t[p].l,l,mid,L,mid,v)+que(t[p].r,mid+,r,mid+,R,v);
}
void ca(int p,int l,int r,int L,int R,int v,int V,int Q){
if (L==l&&R==r){
t[p].a=v;t[p].V=V;t[p].y=;t[p].Q=Q;
t[p].c[N[V]]=((r-l)>>)+(!(l-Q&)||!(r-Q&));
t[p].c[N[v^V]]=((r-l)>>)+((l-Q&)||(r-Q&));t[p].sum=(((((r-l)>>)+((l-Q&)||(r-Q&)))&)*v)^((r-l+&)*V);
}else{
pd(p,l,r);V^=t[p].y;
int mid=l+r>>;
if (R<=mid) ca(t[p].l,l,mid,L,R,v,V,Q);else
if (L>mid) ca(t[p].r,mid+,r,L,R,v,V,Q);else
ca(t[p].l,l,mid,L,mid,v,V,Q),ca(t[p].r,mid+,r,mid+,R,v,V,Q);
up(p,l,r);
}
}
int main(){
register int i,j;
rx=read();ry=read();n=;
for (i=;i<rx;i++)
for (j=;j<ry;j++) o[i]^=<<(i*ry+j),o[j+rx]^=<<(i*ry+j),q^=read()<<(i*ry+j);
n=read();m=read();
s[bo=num=]=;
for(;bo<=num;){
for (i=;i<rx+ry;i++){
for (j=;j<=num;j++)
if (s[j]==(s[bo]^o[i])) break;
if (j>num) s[++num]=s[bo]^o[i];
to[bo][i]=j;
}
bo++;
}
for (i=;i<;i++) N[i]=-;
for (i=;i<=num;i++) N[s[i]]=i;
num=;
build(ro,,n);
while (m--){
bo=read();
if (bo==) bo=read(),cg(ro,,n,bo,o[read()-]^ask(ro,,n,bo)^(bo==?:ask(ro,,n,bo-)));else
if (bo==) if (bo=read(),x=read(),N[q]==-) puts("");else printf("%d\n",que(ro,,n,bo,x,q));else
if (rx=read(),ry=read(),x=o[read()-],cg(ro,,n,ry+,ask(ro,,n,ry)^(((ry-rx+)&)*x)),ca(ro,,n,rx,ry,x,,rx-),rx-) cg(ro,,n,rx,ask(ro,,n,rx-));
}
}
BZOJ:4333: JSOI2012 智者的考验的更多相关文章
- [BZOJ 4332] [JSOI2012]分零食(DP+FFT)
[BZOJ 4332] [JSOI2012]分零食(DP+FFT) 题面 同学们依次排成了一列,其中有A位小朋友,有三个共同的欢乐系数O,S和U.如果有一位小朋友得到了x个糖果,那么她的欢乐程度就是\ ...
- bzoj 4327: JSOI2012 玄武密码
听说这题不公开.. 那就不贴题意了 一眼看上去还以为是exkmp的裸题.. 看了数据范围,呵呵.. 多串匹配嘛.. 就用AC自动机咯,而且每个点最多也就只有$4$个孩子 用原串在AC自动机上走,碰到的 ...
- bzoj 4330: JSOI2012 爱之项链
听说这题不公开.. 那就不贴题意了 首先要用burnside引理求出戒指的种数,那么对于一个顺时针旋转$k$个位置的置换就相当于连上一条$(i,(i+k)%R)$的边,每个环颜色必须相同 环的个数为$ ...
- 【题解】bzoj 4327 JSOI2012 玄武密码
原题传送门 我们先对所有询问串建立AC自动机(今天洛咕上有人分不清AC自动机和自动AC机) 然后将母串在AC自动机上跑,每走到一个点x,从x点出发沿着fail指针所能到的所有前缀都是匹配成功的,暴力向 ...
- bzoj 4332: JSOI2012 分零食 快速傅立叶变换
题目: Description 同学们依次排成了一列,其中有A位小朋友,有三个共同的欢乐系数O,S和U.如果有一位小朋友得到了x个糖果,那么她的欢乐程度就是\(f(x)=O*x^2+S*x+U\) 现 ...
- BZOJ 4327 JSOI2012 玄武密码(后缀自动机)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4327 [题目大意] 求每个子串在母串中的最长匹配 [题解] 对母串建立后缀自动机,用每 ...
- BZOJ 4327 [JSOI2012]玄武密码 (AC自动机)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4327 题解: 做法挺显然,建出AC自动机之后在上面跑,标记所有走过的点,然后再进行递推 ...
- BZOJ 4327: JSOI2012 玄武密码 后缀自动机
Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) # ...
- BZOJ 4332: JSOI2012 分零食 FFT+分治
好题好题~ #include <bits/stdc++.h> #define N 50020 #define ll long long #define setIO(s) freopen(s ...
随机推荐
- 环境变量配置文件,本地登录前提示信息/etc/issue
让配置文件立即生效:source 配置文件 或 . 配置文件 /etc/profile 例:定义了HISTSIZE=1000 /etc/profile.d/*.sh /etc/bashrc ~/.ba ...
- 那些容易遗忘的web前端问题
背景: 年底将至,本人这只才出门的前端菜鸟,终于有空闲的时间来整理一下最近投简历时出现的问题.有的是经常使用但是没有仔细留意造成的:有的是个人认为根本没人使用而忽略的.为了下次不出现这种错误,进行一下 ...
- SET与SPLIT
所以说不要以为前一天考了什么后一天就不会考这类的东西了 出题人总是能竭尽所能 打破你的下限qaq naive split 详解blog来自ljz大佬:http://blog.csdn.net/ljz_ ...
- es6 let和const命令(1)
基本用法 ES新增了let命令,用于声明变量.其用法类似于var,但是所声明的变量只在let命令所在的代码块中有效. for(let i = 0;i<5;i++) {} console.log( ...
- java复写equals例子
public class users { String name; static int age; public boolean equals(Object obj) { if(this==obj){ ...
- PHP array_map()
PHP array_map() 函数 将函数作用到数组中的每个值上,每个值都乘以本身,并返回带有新值的数组: <?php function myfunction($v) { return($v* ...
- http1.0 的哑代理问题
感觉这就和回字的四种写法一样,并无卵用 原以为http1.1的新特性是提供了keep-alive,后来才知道,keep-alive选项http1.1已经不支持了,http1.1对该功能进行了改版 关于 ...
- K:常见的正则表达式
@装载自:http://zxin.cnblogs.com/ 平时对字符串进行校验和处理的时候难免会用到正则表达式,通常采用的方式是去网上寻找相关的正则表达式,之后copy下来进行修改,以使其满足自己的 ...
- 最优化算法:BFGS算法全称和L-BFGS算法全称
在最优化算法研究中按时间先后顺序出现了许多算法包括如下几种,这里介绍下他们的全称和英文名称: 1.最速下降法(Gradient descent) 2.牛顿法(Newton method) 3. 共轭梯 ...
- Hadoop 发行版本 Hortonworks 安装详解(一) 准备工作
一.前言 目前Hadoop发行版非常多,所有这些发行版均是基于Apache Hadoop衍生出来的,之所以有这么多的版本,完全是由Apache Hadoop的开源协议决定的:任何人可以对其进行修改,并 ...