POJ 2155  D区段树

思考:D区段树是每个节点设置一个段树树。

刚開始由于题目是求A[I,J],然后在y查询那直接ans^=Map[i][j]的时候没看懂。后面自己把图画出来了才理解。

由于仅仅有0和1。所以能够用异或来搞,而不须要每次都须要改动。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<set>
#include<cmath>
#include<bitset>
#define mem(a,b) memset(a,b,sizeof(a))
#define lson i<<1,l,mid
#define rson i<<1|1,mid+1,r
#define llson j<<1,l,mid
#define rrson j<<1|1,mid+1,r
#define INF 510010
#define maxn 4010
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
bool Map[maxn][maxn];
int n,q,t,ans;
void update_y(int i,int j,int l,int r,int y1,int y2)
{
if(l==y1&&r==y2) {Map[i][j]^=1;return ;}
int mid=(l+r)>>1;
if(y2<=mid) update_y(i,llson,y1,y2);
else if(y1>mid) update_y(i,rrson,y1,y2);
else
{
update_y(i,llson,y1,mid);
update_y(i,rrson,mid+1,y2);
}
}
void update_x(int i,int l,int r,int x1,int x2,int y1,int y2)
{
if(l==x1&&r==x2)
{
update_y(i,1,1,n,y1,y2);
return ;
}
int mid=(l+r)>>1;
if(x2<=mid) update_x(lson,x1,x2,y1,y2);
else if(x1>mid) update_x(rson,x1,x2,y1,y2);
else
{
update_x(lson,x1,mid,y1,y2);
update_x(rson,mid+1,x2,y1,y2);
}
}
void query_y(int i,int j,int l,int r,int y)
{
ans^=Map[i][j];
if(l==r) return ;
int mid=(l+r)>>1;
if(y<=mid) query_y(i,llson,y);
else query_y(i,rrson,y);
}
void query_x(int i,int l,int r,int x,int y)
{
query_y(i,1,1,n,y);
if(l==r) return ;
int mid=(l+r)>>1;
if(x<=mid) query_x(lson,x,y);
else query_x(rson,x,y);
}
int main()
{
//freopen("test.txt","r",stdin);
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&q);
mem(Map,0);
while(q--)
{
char s[2];
scanf("%s",s);
ans=0;
if(s[0]=='C')
{
int x1,x2,y1,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
update_x(1,1,n,x1,x2,y1,y2);
}
else
{
int x,y;
scanf("%d%d",&x,&y);
query_x(1,1,n,x,y);
printf("%d\n",ans);
}
}
if(t) puts("");
}
return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

POJ 2155 D区段树的更多相关文章

  1. POJ 2155 Matrix(树状数组+容斥原理)

    [题目链接] http://poj.org/problem?id=2155 [题目大意] 要求维护两个操作,矩阵翻转和单点查询 [题解] 树状数组可以处理前缀和问题,前缀之间进行容斥即可得到答案. [ ...

  2. poj 2155 (二维树状数组 区间修改 求某点值)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 33682   Accepted: 12194 Descript ...

  3. POJ poj 2155 Matrix

    题目链接[http://poj.org/problem?id=2155] /* poj 2155 Matrix 题意:矩阵加减,单点求和 二维线段树,矩阵加减,单点求和. */ using names ...

  4. POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化)

    POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化) 题意分析 前置技能 线段树求逆序对 离散化 线段树求逆序对已经说过了,具体方法请看这里 离散化 有些数 ...

  5. poj 1741 Tree(树的点分治)

    poj 1741 Tree(树的点分治) 给出一个n个结点的树和一个整数k,问有多少个距离不超过k的点对. 首先对于一个树中的点对,要么经过根结点,要么不经过.所以我们可以把经过根节点的符合点对统计出 ...

  6. POJ 1849 Two(遍历树)

    POJ 1849 Two(遍历树) http://poj.org/problem?id=1849 题意: 有一颗n个结点的带权的无向树, 在s结点放两个机器人, 这两个机器人会把树的每条边都走一遍, ...

  7. Buy Tickets POJ - 2828 思维+线段树

    Buy Tickets POJ - 2828 思维+线段树 题意 是说有n个人买票,但是呢这n个人都会去插队,问最后的队列是什么情况.插队的输入是两个数,第一个是前面有多少人,第二个是这个人的编号,最 ...

  8. POJ 2155 Matrix (D区段树)

    http://poj.org/problem?id=2155 Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 1 ...

  9. POJ 2155 Matrix【二维树状数组+YY(区间计数)】

    题目链接:http://poj.org/problem?id=2155 Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissio ...

随机推荐

  1. Codeforces Round #252 (Div. 2) B. Valera and Fruits(模拟)

    B. Valera and Fruits time limit per test 1 second memory limit per test 256 megabytes input standard ...

  2. Beijing Perl Workshop - Augest 10th, 2013

    Beijing Perl Workshop - Augest 10th, 2013 Beijing Perl Workshop

  3. 30岁生日,媳妇赏的,U-BOAT手表一枚-数字尾巴

    http://bbs.dgtle.com/thread-139611-1-1.html

  4. Android在子线程中更新UI(一)

    MainActivity如下: package cc.testui1; import android.os.Bundle; import android.os.Handler; import andr ...

  5. extern int *a与extern int a[]

    extern int *a与int a[] Table of Contents 1. 问题: 2. 解答: 1 问题: 以下的声明取自某个源文件: int a[10]; int *b=a; 但在还有一 ...

  6. 静态网页VS动态网页

    干<沙朗新闻发布系统>什么时候.我们已经建立的网页.html的,并且.aspx,第一次接触.我认为这些东西是一样的,因为它,在观看ASP.NET视频的时候.听见里面讲课的老师有提到了这两样 ...

  7. 【转】真正的Acmer

    上海交大 戴文渊 大牛写的东西,建议大家看看 yiyiyi4321 2007-07-10 13:49:30.0 http://dwyak.spaces.live.com/?_c11_BlogPart_ ...

  8. jquery validation remote depends 验证触发条件

    背景: 1:简介页面的变化: 2:邮箱不能反复 改动页面,邮箱默认带出,但字段上带有remote验证.不能反复,焦点由邮箱输入框失去时.会默认触发remote验证. 介绍完成 watermark/2/ ...

  9. Knockout应用开发指南 第四章:模板绑定

    原文:Knockout应用开发指南 第四章:模板绑定 模板绑定The template binding 目的 template绑定通过模板将数据render到页面.模板绑定对于构建嵌套结构的页面非常方 ...

  10. Windows phone 8 学习笔记(9) 集成

    原文:Windows phone 8 学习笔记(9) 集成 本节整理了之前并没有提到的Windows phone 8 系统相关集成支持,包括选择器.锁定屏幕的.联系人的访问等.选择器列举了若干内置应用 ...