标签:2528 mayors posters poj 线段树 离散化
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 47228 | Accepted: 13719 | 
Description
Input
Output

Sample Input
1 5 1 4 2 6 8 10 3 4 7 10
Sample Output
4
在一面长墙上贴海报,后面贴的覆盖前面的,求多次贴海报后最终能看到的海报张数
由于墙很长(10000000),直接线段树会MLE,因此对数据离散化以降低内存消耗,数据处理时从后往前处理(即从后往前贴海报)能降低编写代码的难度
#include <cstdio>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;
const int MAX = 10005;
int n, m, a, b;
int arra[MAX], arrb[MAX];
struct seg{
	int l, r;
	bool v;
}tree[MAX*10];
vector<int> vec;
void build(int root, int l, int r)
{
	tree[root].l = l;
	tree[root].r = r;
	tree[root].v = false;
	if (l == r){
		return;
	}
	int mid = (l + r) / 2;
	build(root * 2, l, mid);
	build(root * 2 + 1, mid + 1, r);
}
bool add(int root, int l, int r)
{
	if (tree[root].v){
		return false;
	}
	if (tree[root].l == l && tree[root].r == r){
		tree[root].v = true;
		return true;
	}
	else{
		bool re;
		int mid = (tree[root].l + tree[root].r) / 2;
		if (r <= mid){
			re = add(root * 2, l, r);
		}
		else if (l > mid){
			re = add(root * 2 + 1, l, r);
		}
		else{
			bool r1 = add(root * 2, l, mid);
			bool r2 = add(root * 2 + 1, mid + 1, r);
			re = r1 || r2;
		}
		if (tree[root * 2].v && tree[root * 2 + 1].v){
			tree[root].v = true;
		}
		return re;
	}
}
int search(int a)
{
	int l = 1, r = vec.size() - 1;
	int mid = (l + r) / 2;
	while (vec[mid] != a){
		if (vec[mid] > a){
			r = mid - 1;
		}
		else{
			l = mid + 1;
		}
		mid = (l + r) / 2;
	}
	return mid;
}
int main()
{
	scanf("%d", &n);
	while (n--)
	{
		vec.clear();
		scanf("%d", &m);
		int ans = 0;
		for (int i = 1; i <= m; ++i)
		{
			scanf("%d%d", &arra[i], &arrb[i]);
			vec.push_back(arra[i]);
			vec.push_back(arrb[i]);
		}
		sort(vec.begin(), vec.end());
		vector<int>::iterator last = unique(vec.begin() + 1, vec.end());
		vec.resize(last - vec.begin());
		build(1, 0, vec.size() - 1);
		for (int i = m; i >= 1; --i)
		{
			if (add(1, search(arra[i]), search(arrb[i]))){
				++ans;
			}
		}
		printf("%d\n",  ans);
	}
	return 0;
}【POJ】 2528 - Mayor's posters 【线段树+离散化】
标签:2528 mayors posters poj 线段树 离散化
原文地址:http://blog.csdn.net/xianyun2009/article/details/45293865