POJ 2155 二维线段树【线段树套线段树】

题目大意:


二维区间里,某个矩形里都是01, 选一个矩形,里面数字01翻转。


最后不停的问某个坐标是0还是1.


POJ不支持C++!1所以常用头文件要注释掉很多……


POJ 2155 二维线段树【线段树套线段树】_第1张图片

大致二维线段树就是这样的了……



每个节点都是一个线段树。


QC大爷说二维线段树不支持打标记。好像这题也不用打标记了,只能标记永久化



//#include 
//#include 
//#include 
//#include 
//using std::tr1::unordered_map;
#include 
#include 
#include 
#include 
#include 

using std::sort;
//using std::bitset;
using std::max;
using std::cout;
//using std::stack;
using std::cin;
using std::endl;
using std::swap;
//using std::pair;
//using std::vector;
//using std::set;
//using std::map;
//using std::multiset;
//using std::queue;
using std::greater;
using std::string;
//using std::priority_queue;
//using std::max_element;
//using std::min_element;

//using __gnu_pbds::pairing_heap_tag;
//__gnu_pbds::priority_queue, pairing_heap_tag> heap;
#define Hash unordered_map
#define pr(x) cout<<#x<<" = "< M)	y_update(k, rson);
}

void x_update(int o, int L, int R)
{
	//cout< M)	x_update(rson);
}

int ans;
int qx, qy;


void y_query(int k, int o, int L, int R)
{
	ans ^= cov[k][o];
//	if (qy <= L && R <= qy)
	if (L ==R)
	{
		return;
	}
	int M = L + (R - L)/2;
	if (qy <= M)	y_query(k, lson);
	else y_query(k, rson);
}

void x_query(int o, int L, int R)
{
	y_query(o, 1, 1, n);
	//if (qx <= L && R<=qx)
	if (L==R)
	{
		return;	
	}
	int M = L + (R - L)/2;
	if (qx <= M)	x_query(lson);
	else x_query(rson);
}

void doit()
{
	while (m--)
	{
		char flag;
		//prln(flag);
		getchar();
		scanf("%c", &flag);
		//prln(flag);
		if (flag=='C')
		{
			scanf("%d%d%d%d", &xql, &yql, &xqr, &yqr);
			//cout<


你可能感兴趣的:(线段树)