cf 341D lahub and xors
题目大意
给定初始值为\(0\)的\(n*n\)矩阵
两种操作
- 矩形内异或一个值
- 求矩阵内异或和
\(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)\)的询问,然后写下式子找规律
&\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的更多相关文章
- Iahub and Xors Codeforces - 341D
二维线段树被卡M+T...于是去学二维树状数组区间更新区间查询 树状数组维护数列区间xor的修改.删除(就是把原问题改成一维): 以下p*i实际都指i个p相xor,即(i&1)*pa表示原数列 ...
- 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 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- cf Round 613
A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...
- ARC下OC对象和CF对象之间的桥接(bridge)
在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...
- [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现
1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...
- 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 ...
- 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 ...
- CF #376 (Div. 2) C. dfs
1.CF #376 (Div. 2) C. Socks dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...
随机推荐
- 第七篇:suds.TypeNotFound: Type not found: '(string, http://schemas.xmlsoap.org/soap/encoding/, )'
想要用Python的suds模块调用webservice地址做自动测试,但是找了很多方法都失败了,最终找到另外一个模块可以作为客户端访问服务器地址. 1.针对非安全的http from zeep im ...
- Python学习——numpy.random
numpy.random.rand numpy.random模块作用是生成随机数,其中numpy.random.rand(d0, d1, ..., dn):生成一个[0,1)之间的随机浮点数或N维浮点 ...
- nginx修改nginx.conf配置可以https访问
修改nginx.conf,参照如下更改配置server { listen 443; server_name abc.com; // 访问域名 ssl on; root /var/www/bjubi.c ...
- 通用后台管理系统源码,响应式布局,Java管理系统源码,零门槛安装部署
本项目是一个通用响应式管理后台,导入开发环境安装就能直接运行,界面也非诚漂亮,在PC端和移动端也是自适应的.非常适合企业或者个人搭建各种商城后台,博客后台,网站管理后台等. 源码启动后的截图 需要这套 ...
- JZOJ 2499. 东风谷早苗
2499. 东风谷早苗 (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Detailed Limits Goto Pro ...
- 42.VUE学习之--组件之子组件使用$on与$emit事件触发父组件实现购物车功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python简单试题4
( ps : 题目中用到的一些random函数在最后末尾处有介绍) 1,在屏幕上显示跑马灯文字 import os # 调用os模块 import time # 调用时间模块 def main(): ...
- 学习pytho第五天 循环
age_of_Bob = 56#定义年龄 count = 0#头部计数 while True:#while循环 if count ==3:#如果次数==3: break#退出 guess_age = ...
- BFS:HDU-1242-Rescue(带守卫的迷宫问题)(优先队列)
解题心得: 1.读清楚题意,本题的题意是有多个'r'(起点),多个r多个bfs比较最短的时间即可,但是hdoj的数据比较水,直接一个起点就行了,迷宫里有多个守卫,如果在路途中遇到守卫会多花费一个时间点 ...
- HDU 4628 Pieces(状态压缩+记忆化搜索)
http://acm.hdu.edu.cn/showproblem.php?pid=4628 题意:给个字符窜,每步都可以删除一个字符窜,问最少用多少步可以删除一个字符窜分析:状态压缩+记忆化搜索 ...