POJ 2155 树套树—线段树套线段树
来源:互联网 发布:淘宝图片轮播怎么更换 编辑:程序博客网 时间:2024/06/10 23:29
Matrix 楼教主出的题目。
题意:一个矩阵初始值都为0,每次给“C X1 Y1 X2 Y2" 去反转这个矩阵。或者"Q X1 Y1"查询这个点是0/1。
第一次接触树套树的题目。
一句AC:对于基本的线段树,再在每个节点建一个y方向上的线段树。tree[n][m]
这道题目更新的时候,对于X方向就是(X1,X2)这个区间,再在其上对Y1,Y2进行更新。
对于查询,X方向上,自顶向下到X1都要对Y进行查询(更新的区间必包括该点),Y方向上则更新到Y1.
#include <stdio.h>#include <string.h>#define MAXN 1005#define mem(a) memset(a, 0, sizeof(a))bool tree[MAXN<<2][MAXN<<2];int X, N, T;int num, X1, X2, Y1, Y2;char ch[10];void updatey(int yl,int yr,int xp,int yp){if(Y1<=yl && yr<=Y2){tree[xp][yp]=!tree[xp][yp];return;}int mid=(yl+yr)>>1;if(Y1<=mid) updatey(yl,mid,xp,yp<<1);if(Y2>mid ) updatey(mid+1,yr,xp,yp<<1|1);}void updatex(int xl,int xr,int xp){if(X1<=xl && xr<=X2){updatey(1,N,xp,1);return;}int mid=(xl+xr)>>1;//下面这句刚开始写错了,按照build写了,忘记是个更新操作...if(X1<=mid) updatex(xl,mid,xp<<1);if(X2>mid) updatex(mid+1,xr,xp<<1|1);}void queryy(int yl,int yr,int xp,int yp){num+=tree[xp][yp];if(yl==yr)return;int mid=(yl+yr)>>1;if(Y1<=mid) queryy(yl,mid,xp,yp<<1);else queryy(mid+1,yr,xp,yp<<1|1);}void queryx(int xl,int xr,int xp){queryy(1,N,xp,1);if(xl==xr)return;int mid=(xl+xr)>>1;if(X1<=mid) queryx(xl,mid,xp<<1);else queryx(mid+1,xr,xp<<1|1);}int main(){ while(~scanf("%d", &X))while(X--) { mem(tree); scanf("%d %d%*c", &N,&T); for(int i=0;i<T;i++) { scanf("%s%d%d",ch,&X1,&Y1); if(ch[0]=='Q') num=0,queryx(1,N,1),printf("%d\n",num%2); else { scanf("%d%d",&X2,&Y2); updatex(1,N,1); } } if(X) printf("\n"); } return 0;}
0 0
- POJ 2155 树套树—线段树套线段树
- POJ 2155 二维线段树【线段树套线段树】
- 树套树-线段树套线段树
- 线段树套Treap
- 【bzoj4553】【Tjoi2016】【Heoi2016】【序列】【树套树】【线段树套线段树】
- 树套树之线段树套线段树(POJ2155 Matrix)
- 【线段树套线段树】POJ2155 Matrix
- hdu4819 线段树套线段树
- uva11297 - Census 线段树套线段树
- POJ2155 线段树套线段树
- poj2155(线段树套线段树)
- BZOJ 3110 线段树套线段树
- 树套树-线段树套平衡树
- 【POJ 2750】 Potted Flower(线段树套dp)
- bzoj3196(线段树套treap)
- bzoj3110(线段树套线段树、树状数组套线段树)
- [BZOJ3110]K大数查询|线段树套线段树
- BSOJ3723:ZJOI2013 k大数查询 线段树套线段树
- time33 hash算法
- org.apache.sqoop.hive.HiveImport - Loading uploaded data into Hive Intercepting System.exit(1)
- ZooKeeperEclipse 插件
- 基于Ubuntu 14.04 LTS编译Android4.4.2源代码
- cocos2dx物理引擎和碰撞检测(四)形状Shapes
- POJ 2155 树套树—线段树套线段树
- cocos2d-html5如何运行
- 【Leetcode】Length of Last Word
- iOS Objective-C Block 的使用示例
- fastDB使用过程中遇到的几个问题
- 工作之杂记--first linq
- 测试中“特殊数据”提出的挑战
- 拷贝构造函数和赋值函数
- easyui window tool 弹出窗口 工具栏 重用问题