二维线段树 poj-2155
题意:t组样例 ,输入 n,m,表示n*n的矩阵进行m次操作 ,C: 输入两个坐标 ,组成的矩形 进行取反操作 ,Q:对输的坐标位置输入其值。
思路:一开始想的是用1000(表示x轴)个线段树(对每段y进行操作)来记录,也是二维的 ,第一维暴力 ,第二维线段树 ,结果TI ,原来还有二维线段树,每个对应的节点都有一颗线段树(好像跟我的差不多)
更新:先找到x对应的区间 ,对相应的y区间修改。
查询:对于每次找的x 都进行一次查询y
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
int e[4040][4040],n;
/*x对应的每个节点都有一颗线段树*/
void updatey(int x,int y,int l,int r,int o,int t)
{
if(x<=l&&y>=r)
{
e[t][o]++;/*跟下面查询有关*/
return;
}
int mid=(l+r)>>1;
if(x<=mid) updatey(x,y,l,mid,o<<1,t);
if(y>mid) updatey(x,y,mid+1,r,o<<1|1,t);
return ;
}
void updatex(int x,int y,int t1,int t2,int l,int r,int o)
{
if(x<=l&&y>=r)
{
updatey(t1,t2,1,n,1,o);
return ;
}
int mid=(l+r)>>1;
if(x<=mid) updatex(x,y,t1,t2,l,mid,o<<1);
if(y>mid) updatex(x,y,t1,t2,mid+1,r,o<<1|1);
return ;
}
int ans;
void queryy(int x,int l,int r,int o,int t)
{
ans+=e[t][o];
if(l==r)
return ;
int mid=(l+r)>>1;
if(x<=mid) queryy(x,l,mid,o<<1,t);
else queryy(x,mid+1,r,o<<1|1,t);
return ;
}
void queryx(int x,int y,int l,int r,int o)/*查询所有的x线段树*/
{
queryy(y,1,n,1,o);/*每个节点x都查询y线段树*/
if(l==r)
return ;
int mid=(l+r)>>1;
if(x<=mid) queryx(x,y,l,mid,o<<1);
else queryx(x,y,mid+1,r,o<<1|1);
}
int main()
{
int t,m;
scanf("%d",&t);
while(t--)
{
memset(e,0,sizeof(e));
scanf("%d%d",&n,&m);
char s[10];
int x1,y1,x2,y2;
for(int i=1;i<=m;i++)
{
scanf("%s",s);
if(s[0]=='C')
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
updatex(x1,x2,y1,y2,1,n,1);
}
else if(s[0]=='Q')
{
ans=0;
scanf("%d%d",&x1,&y1);
queryx(x1,y1,1,n,1);
printf("%d\n",ans%2);
}
}
printf("\n");
}
return 0;
}
二维线段树 poj-2155的更多相关文章
- poj 2155:Matrix(二维线段树,矩阵取反,好题)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17880 Accepted: 6709 Descripti ...
- POJ 2155 Matrix (二维线段树)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17226 Accepted: 6461 Descripti ...
- poj 2155 matrix 二维线段树 线段树套线段树
题意 一个$n*n$矩阵,初始全为0,每次翻转一个子矩阵,然后单点查找 题解 任意一种能维护二维平面的数据结构都可以 我这里写的是二维线段树,因为四分树的写法复杂度可能会退化,因此考虑用树套树实现二维 ...
- POJ 2155 Matrix (二维线段树入门,成段更新,单点查询 / 二维树状数组,区间更新,单点查询)
题意: 有一个n*n的矩阵,初始化全部为0.有2中操作: 1.给一个子矩阵,将这个子矩阵里面所有的0变成1,1变成0:2.询问某点的值 方法一:二维线段树 参考链接: http://blog.csdn ...
- POJ 2155 Matrix【二维线段树】
题目大意:给你一个全是0的N*N矩阵,每次有两种操作:1将矩阵中一个子矩阵置反,2.查询某个点是0还是1 思路:裸的二维线段树 #include<iostream>#include< ...
- POJ 2155 二维线段树 经典的记录所有修改再统一遍历 单点查询
本来是想找一个二维线段树涉及懒惰标记的,一看这个题,区间修改,单点查询,以为是懒惰标记,敲到一半发现这二维线段树就不适合懒惰标记,你更新了某段的某列,但其实其他段的相应列也要打标记,但因为区间不一样, ...
- poj 1195:Mobile phones(二维线段树,矩阵求和)
Mobile phones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 14391 Accepted: 6685 De ...
- POJ2155Matrix(二维线段树)
链接http://poj.org/problem?id=2155 题目操作就是说,每次操作可以是编辑某个矩形区域,这个区域的0改为1,1改为0,每次查询只查询某一个点的值是0还是1. 方法:二维线段树 ...
- POJ2029 二维线段树
Get Many Persimmon Trees POJ - 2029 Seiji Hayashi had been a professor of the Nisshinkan Samurai Sch ...
- POJ1195 二维线段树
Mobile phones POJ - 1195 Suppose that the fourth generation mobile phone base stations in the Tamper ...
随机推荐
- USB小白学习之路(6) IIC EEPROM读取解析
IIC EEPROM读取解析 1. 编译错误处理(这里可以忽略) 在解压包解压了程序后,直接编译,出现如下错误. *** WARNING L14: INCOMPATIBLE MEMORY MODEL ...
- LeetCode---二叉树3-总结例题
二叉树-总结例题 1-从中序与后序遍历序列构造二叉树 给定二叉树的后序遍历和二叉树的中序遍历 想法: 先根据后序遍历的最后一个元素构造根节点 寻找根节点在中序遍历中的位置 递归构建根节点的左右子树 / ...
- spring jpa ManyToMany 理解和使用
1.java和jpa 中所有的关系都是单向的.这个关系数据库不同,关系数据库,通过外键定义并查询,使得反向查询总是存在的. 2.JPA还定义了一个OneToMany关系,它与ManyToMany关系类 ...
- 7-49 求前n项的阶乘之和 (15 分)
从键盘输入一个整数n,求前n项的阶乘之和,1+2!+3!+...+n!的和 输入格式: 输入一个大于1的整数.例如:输入20. 输出格式: 输出一个整数.例如:2561327494111820313. ...
- Springboot 2.2.x 默认不支持put、delete等请求方式
springboot 2.2.x 默认不支持put delete等请 原因:springboot默认关闭了对它们的支持,只要在application.properties里面打开即可 spring.m ...
- mysql in与exists区别
1.exists是对外表做loop循环,每次loop循环再对内表(子查询)进行查询,那么因为对内表的查询使用的索引(内表效率高,故可用大表),而外表有多大都需要遍历,不可避免(尽量用小表),故内表大的 ...
- javascript常用工具函数总结(不定期补充)未指定标题的文章
前言 以下代码来自:自己写的.工作项目框架上用到的.其他框架源码上的.网上看到的. 主要是作为工具函数,服务于框架业务,自身不依赖于其他框架类库,部分使用到es6/es7的语法使用时要注意转码 虽然尽 ...
- 【每日一包0018】fecha
[github地址:https://github.com/ABCDdouyae...] fecha 比moment.js更加轻量级的时间解析和格式化包 format 用法:format(<Dat ...
- 使用nestjs集成grpc具体操作
两个程序中, 提供grpc服务的称为服务端, 调用grpc服务的为客户端, 以下是grpc服务端和客户端的代码编写 1. 创建两个nestjs项目demo1(端口: 3000)和demo2(端 ...
- Windows SMBv3 CVE-2020-0796漏洞
今天,Microsoft不小心泄露了有关新产品的信息 蠕虫的 Microsoft服务器消息块(SMB)协议中的漏洞(CVE-2020-0796). 今天,Microsoft不小心泄露了有关安全更新的信 ...