Matrix(线段树版)
poj2155:http://poj.org/problem?id=2155
题意;同上一遍随笔。
题解:这里用二维线段树打了一发。第一次学习别人的代码。才学的。这种树套树的程序,确实很费脑子,一不小心就会晕了,而且这次是用省空间的方法写的。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
bool seg[][];
int n,ans;
void updatey(int i,int l,int r,int j,int y1,int y2){
if(l==y1&&r==y2){
seg[i][j]^=;
return;
}
int mid=(l+r)/;
if(mid>=y2)updatey(i,l,mid,j*,y1,y2);
else if(mid<y1)updatey(i,mid+,r,j*+,y1,y2);
else {
updatey(i,l,mid,j*,y1,mid);//注意这里不要写成updatey(i,l,mid,j*2,y1,(y1+y2)/2)
updatey(i,mid+,r,j*+,mid+,y2);
}
}
void updatex(int i,int l,int r,int x1,int x2,int y1,int y2){
if(l==x1&&r==x2){
updatey(i,,n,,y1,y2);
return;
}
int mid=(l+r)/;
if(mid>=x2)updatex(i*,l,mid,x1,x2,y1,y2);
else if(mid<x1)updatex(i*+,mid+,r,x1,x2,y1,y2);
else {
updatex(i*,l,mid,x1,mid,y1,y2);
updatex(i*+,mid+,r,mid+,x2,y1,y2);
}
}
void queryY(int i,int l,int r,int j,int y ){
ans^=seg[i][j];
if(l==r)return;
int mid=(l+r)/;
if(mid>=y)queryY(i,l,mid,j*,y);
else
queryY(i,mid+,r,j*+,y); }
void queryX(int i,int l,int r,int x,int y){
queryY(i,,n,,y);
if(l==r)return;
int mid=(l+r)/;
if(mid>=x)queryX(i*,l,mid,x,y);
else
queryX(i*+,mid+,r,x,y); }
int t,x1,y1,x2,y2,cas;
char temp[];
int main(){
scanf("%d",&cas);
int tt=;
while(cas--){
memset(seg,,sizeof(seg));
scanf("%d%d",&n,&t);
if(tt>)printf("\n");
tt=;
for(int i=;i<=t;i++){
scanf("%s%d%d",temp,&x1,&y1);
if(temp[]=='C'){
scanf("%d%d",&x2,&y2);
updatex(,,n,x1,x2,y1,y2);
}
else{
ans=;
queryX(,,n,x1,y1);
printf("%d\n",ans);
} }
}
}
Matrix(线段树版)的更多相关文章
- BZOJ2028:[SHOI2009]会场预约(线段树版)
浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://www.lydsy.com/JudgeOnline/prob ...
- Fountains(非线段树版(主要是不太会用))
Arkady plays Gardenscapes a lot. Arkady wants to build two new fountains. There are n available foun ...
- Luogu P3740 [HAOI2014]贴海报_线段树
线段树版的海报 实际上这个与普通的线段树相差不大,只是貌似数据太水,暴力都可以过啊 本来以为要离散的,结果没打就A了 #include<iostream> #include<cstd ...
- Gym 101911E "Painting the Fence"(线段树区间更新+双端队列)
传送门 题意: 庭院中有 n 个围栏,每个围栏上都被涂上了不同的颜色(数字表示): 有 m 条指令,每条指令给出一个整数 x ,你要做的就是将区间[ x第一次出现的位置 , x最后出现的位置 ]中的围 ...
- HDU 6318.Swaps and Inversions-求逆序对-线段树 or 归并排序 or 离散化+树状数组 (2018 Multi-University Training Contest 2 1010)
6318.Swaps and Inversions 这个题就是找逆序对,然后逆序对数*min(x,y)就可以了. 官方题解:注意到逆序对=交换相邻需要交换的次数,那么输出 逆序对个数 即可. 求逆序对 ...
- UVALive - 5031 Graph and Queries (并查集+平衡树/线段树)
给定一个图,支持三种操作: 1.删除一条边 2.查询与x结点相连的第k大的结点 3.修改x结点的权值 解法:离线倒序操作,平衡树or线段树维护连通块中的所有结点信息,加个合并操作就行了. 感觉线段树要 ...
- HDU-1556-Color the ball (线段树和差分数组两种解法)
N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一 ...
- Luogu P3740 [HAOI2014] 贴海报 线段树
线段树版的海报 实际上这个与普通的线段树相差不大,只是貌似数据太水,暴力都可以过啊 本来以为要离散的,结果没打就A了 #include<iostream> #include<cstd ...
- B. Interesting Array(线段树)
B. Interesting Array time limit per test 1 second memory limit per test 256 megabytes input standard ...
随机推荐
- ashx一般处理程序文件用处
今天逛博客园,无意发现一篇好文章,关于ashx文件的使用. 文章一:向服务器发送josn字符串,服务器端解析 本文转载:http://www.cnblogs.com/yzenet/p/3470388. ...
- android圆角View实现及不同版本这间的兼容
在做我们自己的APP的时候,为了让APP看起来更加的好看,我们就需要将我们的自己的View做成圆角的,毕竟主流也是将很多东西做成圆角,和苹果的外观看起来差不多,看起来也还不错. 要将一个View做成圆 ...
- 《Android开发艺术探索》读书笔记 (3) 第3章 View的事件体系
本节和<Android群英传>中的第五章Scroll分析有关系,建议先阅读该章的总结 第3章 View的事件体系 3.1 View基本知识 (1)view的层次结构:ViewGroup也是 ...
- Adapter优化方案的探索
概要:使用Adapter的注意事项与优化方案本文的例子都可以在结尾处的示例代码连接中看到并下载,如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request. ...
- Verilog之event的用法
编写verilog的testbench时,可使用event变量触发事件. event变量声明为: event var; event触发为: ->var; 捕获触发为: @(var); 在mode ...
- IOS 开发 【序】
首先说说环境的搭建: 需要有一台搭载开发环境的电脑 其实简单的设备就行,不过好的设备会提高开发效率. 有了设备,剩下的就是需要集成开发环境. 去 app store 下载最新的 xcode. 安装上x ...
- windows服务状态自动启动
很多人制作成Windows服务安装包时发现明明在属性里面设置了自动启动,可在服务安装完成以后,还需要手动启动服务,我这里有一种完全实现自动启动的方法 在ProjectInstaller.cs 文件做文 ...
- YII框架开发一个项目的通用目录结构
YII框架开发一个项目的通用目录结构: 3 testdrive/ 4 index.php Web 应用入口脚本文件 5 assets/ 包含公开的资源文件 6 css/ 包含 CSS 文件 7 ima ...
- 使用Eclipse创建Hibernate工程
创建一个java project项目,加入hibernate的jar包和数据库驱动包,并引入到项目.
- Java数据库连接池的几种配置方法(以MySQL数据库为例)
Java数据库连接池的几种配置方法(以MySQL数据库为例) 一.Tomcat配置数据源: 前提:需要将连接MySQL数据库驱动jar包放进Tomcat安装目录中common文件夹下的lib目录中 1 ...