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 ...
随机推荐
- C# 委托与事件详解(三)
今天我接着上面的3篇文章来讲一下,为什么我们在日常的编程活动中遇到这么多sender,EventArgs e 参数:protected void Page_Load(object sender, Ev ...
- 小白的Python之路 day1 pyc
pyc是个什么? 1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在. ...
- iOS 通过UIControl,自定义控件
如:自定义一个可以点击的 图文 #import <UIKit/UIKit.h> @interface UD_Button : UIControl @property(nonatomic,s ...
- C#Linq技术中SelectMany(...)函数的内部实现的伪代码
我们先来假设这种场景: 一个学校中有多个年级,一个年级有多个班级,一个班级里有多个学生.这里我们只需要班级.年级.和学生这三个概念: 让我们先来定义Class类和Student类: // 注意,Cla ...
- 深度优先搜索(DFS)——部分和问题
对于深度优先搜索,这里有篇写的不错的博客:DFS算法介绍 .总得来说是从某个状态开始,不断的转移状态知道无法转移,然后回到前一步的状态.如此不断的重复一直到找到最终的解.根据这个特点,常常会用到递归. ...
- 仿知乎app登录界面(Material Design设计框架拿来就用的TexnInputLayout)
在我脑子里还没有Material Design这种概念,就我个人而言,PC端应用扁平化设计必须成为首选,手当其冲的两款即时通讯旺旺和QQ早就完成UI扁平化的更新,然而客户端扁平化的设计本身就存在天生的 ...
- ArcGIS API for JavaScript 4.2学习笔记[8] 2D与3D视图同步
同一份数据不同视图查看可能用的比较少,因为3D视图放大很多后就和2D地图差不多了,畸变很小,用于超大范围的地图显示时有用,很多时候都是在平面地图上进行分析.查询.操作.教学需要可能会对这个有要求? 本 ...
- ArcGIS 网络分析[1.4] 制作点线要素时需要注意的地方
有很多同学虽然成功做好了网络数据集,但是分析时会出现这样的问题: 这是为什么呢? 这有三个可能的原因: 1. 两个点之间所有的道路没有连通(问题出在点.线数据上). 2. 网络数据集出现了孤立的点位置 ...
- Struts2-整理笔记(一)介绍、搭建、流程、详解struts.xml
Struts2是一种前端的技术框架 替代Servlet来处理请求 Struts2优势 自动封装参数 参数校验 结果的处理(转发|重定向) 国际化 显示等待页面 表单的防止重复提交 搭建框架:导 ...
- Centos7 安装oracle数据库
参考的内容: http://docs.oracle.com/cd/E11882_01/install.112/e24325/toc.htm#CHDCBCJF http://www.cnblogs.co ...