题目大意

给定初始值为\(0\)的\(n*n\)矩阵

两种操作

  1. 矩形内异或一个值
  2. 求矩阵内异或和

    \(n\le 1000\)

分析

二维线段树标记不下传貌似直接可做

有没有更简便的方法?

考虑异或的特性

我们修改\((u,v)-(x,y)时(u\le x,v\le y)\)

修改\((u,v)\),\((x+1,y+1)\),\((x+1,v)\),\((u,y+1)\)这四个单点的值\(a(x,y)\)

然后考虑我们只询问单点\(val(x,y)\)时

那么我们只需要计算$$\bigotimes_{i=1}x\bigotimes_{j=1}y a(x,y)$$

然后再考虑我们询问矩形\((u,v)-(x,y)\)时

首先差分成四个形如\((1,1)-(X,Y)\)的询问,然后写下式子找规律

\[\begin{aligned}
&\bigotimes_{i=1}^X\bigotimes_{j=1}^Y val(i,j)\\
=&\bigotimes_{i=1}^X\bigotimes_{j=1}^Y \bigotimes_{x=1}^i\bigotimes_{y=1}^j a(x,y)\\
=&\bigotimes_{x=1}^X\bigotimes_{y=1}^Y\left(\bigotimes_{i=1}^{X-x+1}~\bigotimes_{j=1}^{Y-y+1}a(x,y)\right)\\
=&\bigotimes_{x=1}^X\bigotimes_{y=1}^Y [x,X奇偶同][y,Y奇偶同] a(x,y)
\end{aligned}
\]

按(x,y)的奇偶性分成四个树状数组维护

可以发现任意两个树状数组没有公共点

注意我们把val化成了a

这样我们就只需要单点修改四个位置(修改到对应树状数组里)

然后询问的时候到(X,Y)奇偶性对应的树状数组里查询即可

solution

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cctype>
#include <algorithm>
using namespace std;
const int M=1e3+7;
typedef long long LL; inline int ri(){
int x=0;bool f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=0;
for(;isdigit(c);c=getchar()) x=x*10+c-48;
return f?x:-x;
} inline LL rl(){
LL x=0;bool f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=0;
for(;isdigit(c);c=getchar()) x=x*10+c-48;
return f?x:-x;
} int n,m; struct Bit{
int c[M][M];
Bit(){memset(c,0,sizeof c);}
inline int lb(int x){return x&-x;}
inline void add(int x,int y,LL d){
int i,j;
if(x==0||y==0) return;
for(i=x;i<=n;i+=lb(i))
for(j=y;j<=n;j+=lb(j)) c[i][j]^=d;
}
inline LL sum(int x,int y){
int i,j; LL res=0;
for(i=x;i>0;i-=lb(i))
for(j=y;j>0;j-=lb(j)) res^=c[i][j];
return res;
}
}C[2][2]; inline int id(int x){return (x+1)>>1;} LL get(int x,int y){
return C[x&1][y&1].sum(id(x),id(y));
} LL get(int u,int v,int x,int y){
return get(x,y)^get(u-1,v-1)^get(x,v-1)^get(u-1,y);
} void add(int x,int y,LL d){
C[x&1][y&1].add(id(x),id(y),d);
} void add(int u,int v,int x,int y,LL d){
add(x+1,y+1,d); add(u,v,d); add(x+1,v,d); add(u,y+1,d);
} int main(){ int i,kd,u,v,x,y; LL d;
n=ri(),m=ri(); while(m--){
kd=ri(),u=ri(),v=ri(),x=ri(),y=ri();
if(kd==1) printf("%lld\n",get(u,v,x,y));
else{
d=rl();//
add(u,v,x,y,d);
}
} return 0;
}

cf 341D lahub and xors的更多相关文章

  1. Iahub and Xors Codeforces - 341D

    二维线段树被卡M+T...于是去学二维树状数组区间更新区间查询 树状数组维护数列区间xor的修改.删除(就是把原问题改成一维): 以下p*i实际都指i个p相xor,即(i&1)*pa表示原数列 ...

  2. ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'

    凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...

  3. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  4. cf Round 613

    A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...

  5. ARC下OC对象和CF对象之间的桥接(bridge)

    在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...

  6. [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现

    1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...

  7. CF memsql Start[c]UP 2.0 A

    CF memsql Start[c]UP 2.0 A A. Golden System time limit per test 1 second memory limit per test 256 m ...

  8. CF memsql Start[c]UP 2.0 B

    CF memsql Start[c]UP 2.0 B B. Distributed Join time limit per test 1 second memory limit per test 25 ...

  9. CF #376 (Div. 2) C. dfs

    1.CF #376 (Div. 2)    C. Socks       dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...

随机推荐

  1. form中 单选框 input[type="radio"] 分组

    在form中有时候需要给单选框分组,这种情况下 可以通过给单选框设置相同的name来进行分组: <html> <head> <title> </title&g ...

  2. PHP去掉字符串中的数字

    这个比较简单,但是也有些需要注意的地方,先贴代码 $class=preg_replace("\\d+",'', $res); 需要使用preg_replace函数,但是只是这么写的 ...

  3. CentOS6.7下的软件安装

    一.JDK安装及其环境变量的配置 **创建一个专门安装软件的文件夹:mkdir /root/apps **解压安装包:tar -zxvf jdk-7u45-linux-x64.tar.gz -C /r ...

  4. HDU 6156 回文 数位DP(2017CCPC)

    Palindrome Function Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 256000/256000 K (Java/Ot ...

  5. B1020 月饼(25 分)

    B1020 月饼(25 分) 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意 ...

  6. spring-data-mongodb

    [引入maven依赖] <!-- mongodb spring --> <dependency>     <groupId>org.springframework. ...

  7. Spring---浅谈IOC

    概念 IOC(Inversion of Control 控制反转)是spring的核心,贯穿始终.所谓IOC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系. 传统 ...

  8. P1194 买礼物(建模)

    P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么就可以只 ...

  9. 递归查询子类sql

    --通过父节点查询子节点 WITH TREE AS( SELECT * FROM Role WHERE RoleID = 4 -- 要查询的父 id UNION ALL SELECT Role.* F ...

  10. http协议学习笔记——状态码

    1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态码. 100(继续) 请求者应当继续提出请求.服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101(切换协议) 请求者已要 ...