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 ...
随机推荐
- RabbitMQ阻塞读取时数据时,关闭channel引起的问题和解决方案
项目场景: 最近在项目中使用了RabbitMq,其中有一个功能必须能随时切断RabbitMq的coumser.第一时间写出来的代码如下: 伪代码: while(flag){ QueueingConsu ...
- [array] leetcode - 35. Search Insert Position - Easy
leetcode - 35. Search Insert Position - Easy descrition Given a sorted array and a target value, ret ...
- python各种类型的转换
#进制转换 ord(x) #将一个字符转换为它的整数值 hex(x) #将一个整数转换为一个十六进制字符串 oct(x) #将一个整数转换为一个八进制字符串 #类型转换int(x [,base ]) ...
- js 自定义html标签属性
<input type="text" id="txtBox" displayName="123456" /> 获取自定义属性值: ...
- php-基于面向对象的MySQL类
class sqlHelper{ private $conn; private $host = 'localhost'; private $user = 'root'; private $pwd = ...
- SpringMVC处理multipart请求.
一.简述 multipart格式的数据会将一个表单拆分为多个部分(part),每个部分对应一个输入域.在一般的表单输入域中,它所对应的部分中会放置文本型数据,但是如果上传文件的话,它所对应的部分可以是 ...
- Ubuntu(Linux)下如何用源码文件安装软件
在Ubuntu中附带了丰富的软件,这些软件一般使用图形化的自动方式(“添加/删除”或“新立得”)即可轻松安装,但是对于那些刚刚问世的新软件,Ubuntu的源中还未收录其中,这时我们就需要用到一种更通用 ...
- 脚本全选全不选操作asp.net treeview控件
//树节点勾选(取消)上级自动全部勾选(取消)下级,勾选下级自动勾选上级,取消全部下级,自动取消上级 //事件响应函数 var HandleCheckbox = function () { //取得事 ...
- Linux下Jdk的安装和jdk环境变量的设置
我们在Linux下安装系统软件的时候,经常遇到一些系统环境变量配置的问题.什么是环境变量?如何定制环境变量?我将在下面做一些介绍.一.什么是环境变量?Linux是一个多用户的操作系统.多用户意味着每个 ...
- java多线程(五)-访问共享资源以及加锁机制(synchronized,lock,voliate)
对于单线程的顺序编程而言,每次只做一件事情,其享有的资源不会产生什么冲突,但是对于多线程编程,这就是一个重要问题了,比如打印机的打印工作,如果两个线程都同时进行打印工作,那这就会产生混乱了.再比如说, ...