Mayor's posters POJ - 2528 线段树区间覆盖
//线段树区间覆盖
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=;
int flag;
struct node{
int l,r;
//vis 是这块区域是否完全被覆盖
bool vis;
}tr[N<<];
struct point
{
int id;
int x;
}post[N<<];
int cmp1(point a,point b)
{
return a.x<b.x;
}
int cmp2(point a,point b)
{
if(a.id==b.id)
return a.x<b.x;
return a.id>b.id;
}
void pushup(int u)
{
tr[u].vis=tr[u<<].vis&&tr[u<<|].vis;
}
void build(int u,int l,int r)
{
tr[u]={l,r,};
if(l==r)
return ;
int mid=l+r>>;
build(u<<,l,mid);
build(u<<|,mid+,r);
}
void query(int u,int l,int r)
{
if(tr[u].vis)
return ;
if(tr[u].l==l&&tr[u].r==r)
{
tr[u].vis=;
flag=;
return;
}
int mid=tr[u].l+tr[u].r>>;
if(r<=mid)
query(u<<,l,r);
else if(l>mid)
query(u<<|,l,r);
else
{
query(u<<,l,mid);
query(u<<|,mid+,r);
}
pushup(u);
}
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
//离散化之前的数据
for(int i=;i<*n;i+=)
{
cin>>post[i].x>>post[i+].x;
post[i].id=post[i+].id=i;
}
//按照离散化之前的数据排序
sort(post,post+*n,cmp1);
//离散化
int tot=,pre=;
for(int i=;i<*n;i++)
{
//如果和上一个一样
//那么排名也就一样
if(post[i].x==pre)
{
post[i].x=tot;
}
//如果不一样,记录当前值
//排名++
else
{
pre=post[i].x;
post[i].x=++tot;
}
}
build(,,*n);
//排序,从后往前贴
//id大的在前
sort(post,post+*n,cmp2);
int ans=;
for(int i=;i<*n;i+=)
{
int l=post[i].x;
int r=post[i+].x;
flag=;
query(,l,r);
if(flag)
ans++;
}
cout<<ans<<endl;
}
return ;
}
Mayor's posters POJ - 2528 线段树区间覆盖的更多相关文章
- Mayor's posters POJ - 2528(线段树 + 离散化)
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 74745 Accepted: 21574 ...
- Mayor's posters POJ - 2528 线段树(离散化处理大数?)
题意:输入t组数据,输入n代表有n块广告牌,按照顺序贴上去,输入左边和右边到达的地方,问贴完以后还有多少块广告牌可以看到(因为有的被完全覆盖了). 思路:很明显就是线段树更改区间,不过这个区间的跨度有 ...
- poj 2528 线段树区间修改+离散化
Mayor's posters POJ 2528 传送门 线段树区间修改加离散化 #include <cstdio> #include <iostream> #include ...
- POJ 2528 Mayor's posters 贴海报 线段树 区间更新
注意离散化!!!线段树的叶子结点代表的是一段!!! 给出下面两个简单的例子应该能体现普通离散化的缺陷: 1-10 1-4 5-10 1-10 1-4 6-10 普通离散化算出来的结果都会是2,但是第二 ...
- POJ - 2528Mayor's posters (离散化+线段树区间覆盖)
The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign h ...
- POJ - 2528 Mayor's posters (离散化+线段树区间修改)
https://cn.vjudge.net/problem/POJ-2528 题意 给定一些海报,可能相互重叠,告诉你每个海报的宽度(高度都一样的)和先后叠放顺序,问没有被完全盖住的有多少张? 分析 ...
- HDU 4509 湫湫系列故事——减肥记II(线段树-区间覆盖 或者 暴力技巧)
http://acm.hdu.edu.cn/showproblem.php?pid=4509 题目大意: 中文意义,应该能懂. 解题思路: 因为题目给的时间是一天24小时,而且还有分钟.为了解题方便, ...
- [NOI2015] 软件包管理器【树链剖分+线段树区间覆盖】
Online Judge:Luogu-P2146 Label:树链剖分,线段树区间覆盖 题目大意 \(n\)个软件包(编号0~n-1),他们之间的依赖关系用一棵含\(n-1\)条边的树来描述.一共两种 ...
- HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023 解题报告:一面墙长度为n,有N个单元,每个单元编号从1到n,墙的初始的颜色是2,一共有30种颜色 ...
随机推荐
- Spring基于注解配置AOP
D:\Java\IdeaProjects\JavaProj\SpringHelloWorld\src\aop.xml <?xml version="1.0" encoding ...
- CCF_201503-2_数字排序
自己写个排序的cmp. #include<iostream> #include<cstdio> #include<algorithm> using namespac ...
- False注入,以及SQL注入技巧总结
title: False注入,以及SQL注入技巧总结 date: 2017-04-25 00:23:31 tags: ['SQL注入'] --- 利用False我们可以绕过一些特定的WAF以及一些未来 ...
- OSPF笔记——LSA及其字段,及其作用
Link State ID Link State ID remains at 32 bits in length, Link State ID has shed any addressing sema ...
- SNMP协议交互学习-获取udp的udpindatagrams
MIB的组织结构,如下左图,对于udp来说1.3.6.1.2.1.7,组织如下右图,包括4个标量和1个表格 udp节点在LwIP中的定义如下: ] = { , , , , }; ] = { (stru ...
- Linux(CentOS 7)修改max open files的值
新安装的linux系统允许每个程序的最大打开文件数默认是1024,可以通过ulimit -n命令来查看,查看全部限制,则可以使用命令ulimit -a [root@test ~]# ulimit -a ...
- tomcat solr服务无法搜索中文
把tomcat的配置文件修改一下就好了, vi server.xml <Connector port="8080" protocol="HTTP/1.1" ...
- React之JSX的语法细节
带注释 import React, { Component, Fragment } from 'react' import './style.css' class TodoList extends C ...
- 细读jsr中的yield语义,或者不是我们想象中的那样
这只是我的个人观点,如有错误,希望你可以指出. 首先英文原版 中文译版 我觉得“不需要”还会让人产生误解,应该译为不一定要. 很多时候会被断章取义地理解,我们一定要有“不一定”,“可能”的意识,下面给 ...
- 基于HttpURLConnection的接口调用,支持GET&POST
单位要做一个多级部署平台,大概意思就是一级系统可以监控下属地域的数据也可管理本地的数据.之前做短信猫用过httpClient请求,与此大同小异.封装了一个两种请求方式的工具类. package com ...