POJ 2528 Mayor's posters

Mayor’s posters

https://vjudge.net/problem/POJ-2528
The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral posters at all places at their whim. The city council has finally decided to build an electoral wall for placing the posters and introduce the following rules:
Every candidate can place exactly one poster on the wall.
All posters are of the same height equal to the height of the wall; the width of a poster can be any integer number of bytes (byte is the unit of length in Bytetown).
The wall is divided into segments and the width of each segment is one byte.
Each poster must completely cover a contiguous number of wall segments.

They have built a wall 10000000 bytes long (such that there is enough place for all candidates). When the electoral campaign was restarted, the candidates were placing their posters on the wall and their posters differed widely in width. Moreover, the candidates started placing their posters on wall segments already occupied by other posters. Everyone in Bytetown was curious whose posters will be visible (entirely or in part) on the last day before elections.
Your task is to find the number of visible posters when all the posters are placed given the information about posters’ size, their place and order of placement on the electoral wall.
Input
The first line of input contains a number c giving the number of cases that follow. The first line of data for a single case contains number 1 <= n <= 10000. The subsequent n lines describe the posters in the order in which they were placed. The i-th line among the n lines contains two integer numbers l i and ri which are the number of the wall segment occupied by the left end and the right end of the i-th poster, respectively. We know that for each 1 <= i <= n, 1 <= l i <= ri <= 10000000. After the i-th poster is placed, it entirely covers all wall segments numbered l i, l i+1 ,… , ri.
Output
For each input data set print the number of visible posters after all the posters are placed.

The picture below illustrates the case of the sample input.
在这里插入图片描述
Sample Input
1
5
1 4
2 6
8 10
3 4
7 10
Sample Output
4
C++

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>

using namespace std;

const int MAXN = 10000 + 10;

struct node{
	int l, r, lazy;
}segTree[MAXN << 2];

int cnt, vis[MAXN], L[MAXN], R[MAXN], H[MAXN << 1];

void pushdown(int x)
{
	if(segTree[x].lazy != -1)
	{
		segTree[x << 1].lazy = segTree[x << 1 | 1].lazy = segTree[x].lazy;
		segTree[x].lazy = -1;
	}
}

void build(int x, int l, int r)
{
	segTree[x].l = l;
	segTree[x].r = r;
	if(l == r)
	{
		segTree[x].lazy = -1;
		return;
	}
	int mid = l + r >> 1;
	build(x << 1, l, mid);
	build(x << 1 | 1, mid + 1, r);
	segTree[x].lazy = -1;
}

void update(int x, int l, int r, int val)
{
	if(l <= segTree[x].l && segTree[x].r <= r)
	{
		segTree[x].lazy = val;
		return;
	}
	pushdown(x);
	int mid = segTree[x].l + segTree[x].r >> 1;
	if(r <= mid) update(x << 1, l, r, val);
	else if(l > mid) update(x << 1 | 1, l, r, val);
	else
	{
		update(x << 1, l, mid, val);
		update(x << 1 | 1, mid + 1, r, val);
	}
}

void query(int x, int l, int r)
{
	if(segTree[x].l == segTree[x].r)
	{
		if(segTree[x].lazy != -1)
		{
			if(!vis[segTree[x].lazy])
			{
				cnt ++;
				vis[segTree[x].lazy] = true;
			}
		}
		return;
	}
	pushdown(x);
	int mid = l + r >> 1;
	query(x << 1, l, mid);
	query(x << 1 | 1, mid + 1, r); 
}

int main()
{
	int T;
	scanf("%d", &T);
	while(T --)
	{
		int n;
		memset(vis, false, sizeof(vis));
		cnt = 0;
		int tmp = 1;
		scanf("%d", &n);
		for(int i = 1; i <= n; i ++)
		{
			scanf("%d%d", &L[i], &R[i]);
			H[tmp ++] = L[i];
			H[tmp ++] = R[i];
		}
		sort(H + 1, H + tmp);
		int size = unique(H + 1, H + tmp) - H - 1;
		build(1, 1, size);
		int tl, tr;
		for(int i = 1; i <= n; i ++)
		{
			tl = lower_bound(H + 1, H + size + 1, L[i]) - H;
			tr = lower_bound(H + 1, H + size + 1, R[i]) - H;
			update(1, tl, tr, i);
		}
		query(1, 1, n);
		printf("%d\n", cnt);
	}
	return 0;
}
资源下载链接为: https://pan.quark.cn/s/5c50e6120579 在Android移动应用开发中,定位功能扮演着极为关键的角色,尤其是在提供导航、本地搜索等服务时,它能够帮助应用获取用户的位置信息。以“baiduGPS.rar”为例,这是一个基于百度地图API实现定位功能的示例项目,旨在展示如何在Android应用中集成百度地图的GPS定位服务。以下是对该技术的详细阐述。 百度地图API简介 百度地图API是由百度提供的一系列开放接口,开发者可以利用这些接口将百度地图的功能集成到自己的应用中,涵盖地图展示、定位、路径规划等多个方面。借助它,开发者能够开发出满足不同业务需求的定制化地图应用。 Android定位方式 Android系统支持多种定位方式,包括GPS(全球定位系统)和网络定位(通过Wi-Fi及移动网络)。开发者可以根据应用的具体需求选择合适的定位方法。在本示例中,主要采用GPS实现高精度定位。 权限声明 在Android应用中使用定位功能前,必须在Manifest.xml文件中声明相关权限。例如,添加<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />,以获取用户的精确位置信息。 百度地图SDK初始化 集成百度地图API时,需要在应用启动时初始化地图SDK。通常在Application类或Activity的onCreate()方法中调用BMapManager.init(),并设置回调监听器以处理初始化结果。 MapView的创建 在布局文件中添加MapView组件,它是地图显示的基础。通过设置其属性(如mapType、zoomLevel等),可以控制地图的显示效果。 定位服务的管理 使用百度地图API的LocationClient类来管理定位服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值