poj 2155 二维线段树 插线问点
来源:互联网 发布:java 打包jar 依赖库 编辑:程序博客网 时间:2024/05/16 16:55
题意:给定一个矩阵,初始全部为0,给定若干次操作,每次操作或者区间取反或者查询一个点的值。
思路: 二维线段树
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>using namespace std;const int MAXN = 1010;struct Nodey{ int l,r; int val;};int n;int locx[MAXN],locy[MAXN];struct Nodex{ int l,r; Nodey sty[MAXN*3]; void build(int i,int _l,int _r) { sty[i].l = _l; sty[i].r = _r; sty[i].val = 0; if(_l == _r) { locy[_l] = i; return; } int mid = (_l + _r)>>1; build(i<<1,_l,mid); build((i<<1)|1,mid+1,_r); } void add(int i,int _l,int _r,int val) { if(sty[i].l == _l && sty[i].r == _r) { sty[i].val += val; return; } int mid = (sty[i].l + sty[i].r)>>1; if(_r <= mid)add(i<<1,_l,_r,val); else if(_l > mid)add((i<<1)|1,_l,_r,val); else { add(i<<1,_l,mid,val); add((i<<1)|1,mid+1,_r,val); } }}stx[MAXN*3];void build(int i,int l,int r){ stx[i].l = l; stx[i].r = r; stx[i].build(1,1,n); if(l == r) { locx[l] = i; return; } int mid = (l+r)>>1; build(i<<1,l,mid); build((i<<1)|1,mid+1,r);}void add(int i,int x1,int x2,int y1,int y2,int val){ if(stx[i].l == x1 && stx[i].r == x2) { stx[i].add(1,y1,y2,val); return; } int mid = (stx[i].l + stx[i].r)/2; if(x2 <= mid)add(i<<1,x1,x2,y1,y2,val); else if(x1 > mid)add((i<<1)|1,x1,x2,y1,y2,val); else { add(i<<1,x1,mid,y1,y2,val); add((i<<1)|1,mid+1,x2,y1,y2,val); }}int sum(int x,int y){ int ret = 0; for(int i = locx[x];i;i >>= 1) for(int j = locy[y];j;j >>= 1) ret += stx[i].sty[j].val; return ret;}int main(){ int T; scanf("%d",&T); while(T--) { int q; scanf("%d%d",&n,&q); build(1,1,n); char op[10]; int x1,x2,y1,y2; while(q--) { scanf("%s",op); if(op[0] == 'C') { scanf("%d%d%d%d",&x1,&y1,&x2,&y2); add(1,x1,x2,y1,y2,1); } else { scanf("%d%d",&x1,&y1); if(sum(x1,y1)%2 == 0)printf("0\n"); else printf("1\n"); } } if(T)printf("\n"); } return 0;}
0 0
- poj 2155 二维线段树 插线问点
- POJ 2155 二维线段树
- POJ 2155 二维线段树
- poj 2155 二维线段树
- POJ 2155 二维线段树【线段树套线段树】
- POJ 2155 二维线段树 书套树
- 二维线段树 POJ 2155 Matrix
- POJ 2155(二维zkw线段树)
- POJ 2155 Matrix 二维线段树
- POJ 2155 Matrix【二维线段树】
- POJ 2155 Matrix (二维线段树)
- poj 2155 二维线段树/树状数组
- POJ 2155 Matrix 二维线段树
- POJ 2155 Matrix (二维线段树)
- POJ 2155 二维线段树基本操作
- poj 2155 Matrix 【二维线段树】
- POJ 2155 Matrix(二维线段树)
- 二维线段树(Matrix,poj 2155)
- Gradle 编译多个工程(包含多Library库工程依赖)指导
- struts中的constant
- 时间格式字符串转化为date和时间戳
- jquery实现手机端长按响应事件
- HDU 1166 敌兵布阵
- poj 2155 二维线段树 插线问点
- 在Azure上构建可扩展的移动应用程序
- hdu 5380 Travel with candy 单调队列 2015 Multi-University Training Contest 8
- 通配符与正则表达式
- Mysql安装与配置
- Hdu oj 1869 六度分离
- C++ Primer 学习笔记与思考_7 void和void*指针的用法
- RHEL 7.0安装配置LAMP服务器(Apache+PHP+MariaDB)
- sass基础教程