HDU 5892 Resident Evil
题目链接:传送门
题目大意:有50种动物,给你n*n的矩阵,m次操作,P代表加入操作,在左上角 x1,y1 到右下角 x2,y2,的矩形范围内加入
种类为x,数量为y的动物。
Q代表询问操作,在左上角 x1,y1 到右下角 x2,y2,对于1~50种动物,如果数量之和为偶数,输出1,否则输出2。
题目思路:树状数组 区间异或,区间查询。
/*--------------------------------------------------分割线-------------------------------------------------------------*/
以下均考虑树状数组维护异或值
我们首先要知道树状数组都是向后更新,向前查询的。
首先考虑简单的问题
如果要求一维空间,单点修改,区间查询,那这个就直接像普通树状数组那样,修改和查询时把+改成^就行了。
如果要求一维空间,区间修改,区间查询,这时候就不能像普通树状数组那么改了。不信可以试试。:)
如果异或更新 [x,y] ^v
我们知道这样一个性质,假如对于位置 x,那么x+1,x+3,x+7...这些位置上的值是不会被V影响的。
因为更新时这些位置上的数异或V偶数次,值不会受影响。只有与 x 奇偶性相同的位置 x+2,x+4...才会被更新。
因此,我们可以开个二维数组tree[2][maxn],只修改 x奇偶性对应的那一维,比如可以写成 x&1,偶数修改0,奇数修改1
查询时对应奇偶性查询。
本题要求二维空间,区间修改,区间查询,那么扩展一下,开4个数组即可。
然后我们把对应的50种动物状态压缩 1<<50,开LL tree[4][3001][3001],这样不会爆空间。
然后对于加入的动物数量,首先不用去管面积,直接用给的数量值(因为 偶*奇==偶,偶*偶==偶)
所以只要加入偶数数量就不用管,因为数量永远是偶数,而初始值0也是偶数,也就是对答案没影响。
对于加入奇数的情况,就必须老老实实加入(奇*奇==奇,奇*偶==偶),面积会对奇数情况有影响。
之后只需按上诉方法异或即可。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cctype>
#include <queue>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <climits>
#define lson rt<<1,l,mid
#define rson rt<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
#define mst(x,y) memset(x,y,sizeof(x))
#define mcp(x,y) memcpy(x,y,sizeof(y))
using namespace std;
#define gamma 0.5772156649015328606065120
#define mod 1000000007
#define inf 0x3f3f3f3f
#define N 1005050
#define maxn 3001
typedef pair<int,int> PII;
typedef long long LL; int n,m,k,x,y,v;
LL tree[][][][];
int x1,y1,x2,y2;
LL mon[];
void add(int x,int y,LL v){
for(int i=x;i<=n;i+=(i&-i))
for(int j=y;j<=n;j+=(j&-j))
tree[x&][y&][i][j]^=v;
}
LL query(int x,int y){
LL res=;
for(int i=x;i;i-=(i&-i))
for(int j=y;j;j-=(j&-j))
res^=tree[x&][y&][i][j];
return res;
}
int main(){
//freopen("in.txt","r",stdin);
int i,j,group;
char ch;
while(scanf("%d%d",&n,&m)!=EOF){
mst(tree,);
while(m--){
scanf(" %c%d%d%d%d",&ch,&x1,&y1,&x2,&y2);
if(ch=='P'){
mst(mon,);
scanf("%d",&k);
while(k--){
scanf("%d%d",&x,&y);
--x;
mon[x]+=y;
}
LL temp=;
for(i=; i<; ++i){
if(mon[i]&)
temp|=(1ll<<i);
}
++x2;++y2;
add(x1,y1,temp);
add(x2,y2,temp);
add(x1,y2,temp);
add(x2,y1,temp);
}
else{
--x1,--y1;
LL temp=query(x1,y1)^query(x2,y2)^query(x1,y2)^query(x2,y1);
for(i=;i<;++i)
if(temp&(1ll<<i))printf("2 ");
else printf("1 ");
printf("\n");
}
}
}
return ;
}
HDU 5892 Resident Evil的更多相关文章
- 2016.9.18 --- Shenyang ol
1001 Resident Evil 1002 List wants to travel 1003 hannnnah_j’s Biological Test 1004 Mathematician QS ...
- Java HttpURLConnection 抓取网页内容 解析gzip格式输入流数据并转换为String格式字符串
最近GFW为了刷存在感,搞得大家是头晕眼花,修改hosts 几乎成了每日必备工作. 索性写了一个小程序,给办公室的同事们分享,其中有个内容 就是抓取网络上的hosts,废了一些周折. 我是在一个博客上 ...
- 3D视频的质量评价报告 (MSU出品)
俄罗斯的MSU Graphics & Media Lab (Video Group)出品的3D视频的质量评价报告.测试了一些3D视频的质量,其测试方法值得我们参考.在此翻译一下部分文字. 注: ...
- 【翻译】基于web创建逼真的3D图形 | CSS技巧
个人翻译小站:http://www.zcfy.cc/article/creating-photorealistic-3d-graphics-on-the-web-css-tricks-4039.htm ...
- GDC2017资料整理
GDC2017的资料最近放出来了,我筛选了一下 特别是Horizon放出很多干货,也有一些去年的末班车.Vulkan有一堆,但不是很感兴趣 感谢王同学的搬运和分类(包含以下链接pdf和视频): htt ...
- 五、Pandas玩转数据
Series的简单运算 import numpy as np import pandas as pd s1=pd.Series([1,2,3],index=['A','B','C']) print(s ...
- XPath注入
XPath基础 XPath 即为 XML 路径语言,是一门在XML文档中查找信息的语言.XPath 基于 XML 的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻 ...
- DIY申请达姆施塔特工业大学计算机专业(Informatik)硕士(Master)【附个人简历和动机信】
1.个人概况 双非院校本科毕业两年,已来德国一年. APS绩点2.5,均分80.17. 2020.6月考出5443德福成绩,7月中下旬递交材料,9月初获得Zulassung(录取) PS:后来考出54 ...
- 剖析虚幻渲染体系(14)- 延展篇:现代渲染引擎演变史Part 1(萌芽期)
目录 14.1 本篇概述 14.1.1 游戏引擎简介 14.1.2 游戏引擎模块 14.1.3 游戏引擎列表 14.1.3.1 Unreal Engine 14.1.3.2 Unity 14.1.3. ...
随机推荐
- KindEditor 4.1.7的使用技巧
1.载入进这个自己写的js代码 $(function(){ if ($("textarea.editor").length) { var editor = KindEditor.c ...
- Android自己定义之流式布局
流式布局,优点就是父类布局能够自己主动的推断子孩子是不是须要换行,什么时候须要换行,能够做到网页版的标签的效果. 今天就是简单的做了自己定义的流式布局. 详细效果: 原理: 事实上非常easy,Mea ...
- Failure to transfer org.apache.maven.plugins:maven-resources-plugin:pom:2.7
导入maven项目时,pom.xml文件报错如下: Failure to transfer org.apache.maven.plugins:maven-resources-plugin:pom:2. ...
- resin设置jvm参数
http://www.quiee.com.cn/archives/592/ resin resin3.0 及前期版本内存设置, 如下: 启动时设置虚拟内存: unix> bin/httpd.sh ...
- 将object格式转为json格式
在页面内容显示时,有时需要用到json格式.但数据库内容的显示,需要将数据库中获取的格式转为json: using Newtonsoft.Json;public static string ToJso ...
- jquery中ajax的相关事件汇总
Jquery ajax事件分类 (一) 局部事件 local events 局部事件:在单个Ajax请求对象中绑定的事件,每个 Ajax 请求对象能够依据须要绑定自己的局部事件 .局部事件仅仅会被那个 ...
- unity5, UGUI刺穿问题解法
我希望在touch屏幕时player起跳,于是在playerControl.cs的Update函数中添加如下touch代码: if (Input.GetMouseButtonDown (0)) {/ ...
- layui基础上的tree菜单动态渲染;
var layout=[ { title:'脚本对象名称', treeNodes:true, headerClass:'value_col', colClass:'value_col', style: ...
- [JNA系列]Java调用Delphi编写的Dll之实例Delphi使用PAnsiChar
Delphi代码 unit UnitDll; interface uses StrUtils, SysUtils, Dialogs; function DoBusinessAnsi(pvData: P ...
- linux学习笔记28--监控命令vmstat,iostat, lsof
linux的监控包括多个方面,常用的是进程,内存,I/O,磁盘空间这三个方面. vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程. ...