POJ2528线段树段更新逆序异或(广告牌)
题意:
可以这样理解,有一条直线,然后用n条线段去覆盖,最后问全部都覆盖完之后还有多少是没有被完全覆盖的。
思路:
一开始想的有点偏,想到起点排序,然后..失败了,原因是忘记了题目输入的顺序就是覆盖的顺序,后来突然想到了逆序,这个题目想到逆序也就差不多了,我们可以逆序处理,然后用异或操作去判断当前这段是否全部都被覆盖了,只要异或不是1,那么就是还有没覆盖的,那么答案++,更新这段,把这段全都覆盖上。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 20005
#define lson l ,mid ,t << 1
#define rson mid + 1 ,r ,t << 1 | 1
using namespace std;
typedef struct
{
int l ,r;
}EDGE;
EDGE E[N];
int X[N*4];
int mark[N*4];
int num[N] ,numt[N];
void PushUp(int t)
{
X[t] = X[t<<1] & X[t<<1|1];
return ;
}
void PushDown(int t)
{
if(mark[t])
{
mark[t<<1] = mark[t<<1|1] = 1;
X[t<<1] = X[t<<1|1] = 1;
mark[t] = 0;
}
return ;
}
void BuidTree()
{
memset(X ,0 ,sizeof(X));
memset(mark ,0 ,sizeof(mark));
return ;
}
void Update(int l ,int r ,int t ,int a ,int b)
{
if(a <= l && b >= r)
{
X[t] = mark[t] = 1;
return ;
}
PushDown(t);
int mid = (l + r) >> 1;
if(a <= mid) Update(lson ,a ,b);
if(b > mid) Update(rson ,a ,b);
PushUp(t);
}
int Query(int l ,int r ,int t ,int a ,int b)
{
if(a <= l && b >= r)
return X[t];
PushDown(t);
int mid = (l + r) >> 1;
int s1 = -1 ,s2 = -1;
if(a <= mid) s1 = Query(lson ,a ,b);
if(b > mid) s2 = Query(rson ,a ,b);
if(s1 == -1 && s2 == -1) return 0;
if(s1 == -1) return s2;
if(s2 == -1) return s1;
return s1 & s2;
}
int Search2(int n ,int a)
{
int low = 1 ,up = n ,mid ,ans;
while(low <= up)
{
mid = (low + up) >> 1;
if(a >= num[mid])
{
ans = mid;
low = mid + 1;
}
else up = mid - 1;
}
return ans;
}
int main ()
{
int n ,i ,Ans ,t ,id ,nn;
scanf("%d" ,&t);
while(t--)
{
scanf("%d" ,&n);
for(id = 0 ,i = 1 ;i <= n ;i ++)
{
scanf("%d %d" ,&E[i].l ,&E[i].r);
numt[++id] = E[i].l;
numt[++id] = E[i].r;
}
sort(numt + 1 ,numt + id + 1);
nn = 0;
for(i = 1 ;i <= id ;i ++)
if(i == 1 || numt[i] != numt[i-1])
num[++nn] = numt[i];
BuidTree();
for(Ans = 0 ,i = n ;i >= 1 ;i --)
{
int l = Search2(nn ,E[i].l);
int r = Search2(nn ,E[i].r);
if(Query(1 ,nn ,1 ,l ,r)) continue;
Ans ++;
Update(1 ,nn ,1 ,l ,r);
}
printf("%d\n" ,Ans);
}
return 0;
}
POJ2528线段树段更新逆序异或(广告牌)的更多相关文章
- POJ2828线段树单点更新——逆序更新
Description 输入n个有序对< pi, vi >,pi表示在第pi个位置后面插入一个值为vi的人,并且pi是不降的.输出最终得到的v的序列 Input 多组用例,每组用例第一行为 ...
- UVA11992不错的线段树段更新
题意: 给你一个矩阵,最大20*50000的,然后有三个操作 1 x1 y1 x2 y2 v 把子矩阵的值全部都加上v 2 x1 y1 x2 y2 v 把子矩阵的值全部都变成v 2 x ...
- hdu4267线段树段更新,点查找,55棵线段树.
题意: 给你N个数,q组操作,操作有两种,查询和改变,查询就是查询当前的这个数上有多少,更改是给你a b k c,每次从a到b,每隔k的数更改一次,之间的数不更改,就相当于跳着更新. 思路: ...
- hdu1556 线段树段更新(简单题)
题意: N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动车从气球a开始到气球b依次给每个 ...
- POJ3277 线段树段更新,点询问+二分离散化+暴力
题意: x轴上有一些矩形,问你这些矩形覆盖的面积和是多少. 思路: 首先范围很大,n很小,果断离散化,然后我们就是求出任意区间的最大值作为当前区间的高,最后在算一遍答案就行了, ...
- POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和)
POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和) 题意分析 卡卡屋前有一株苹果树,每年秋天,树上长了许多苹果.卡卡很喜欢苹果.树上有N个节点,卡卡给他们编号1到N,根 ...
- POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化)
POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化) 题意分析 前置技能 线段树求逆序对 离散化 线段树求逆序对已经说过了,具体方法请看这里 离散化 有些数 ...
- HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对)
HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对) 题意分析 给出n个数的序列,a1,a2,a3--an,ai∈[0,n-1],求环序列中逆序对 ...
- POJ-2528 Mayor's posters(线段树区间更新+离散化)
http://poj.org/problem?id=2528 https://www.luogu.org/problem/UVA10587 Description The citizens of By ...
随机推荐
- HDOJ-2087(KMP算法)
剪花布条 HDOJ-2087 本题和hdoj-1686相似,唯一不同的是这里的子串一定要是单独的.所以在确定有多少个子串时不能用前面的方法.而是在循环时,只要找到一个子串,i就不是++,而是+=子串的 ...
- WebService和Web API 区别
WebService的特征: 1 基于SOAP协议的,数据格式为XML 2 只支持HTTP协议,只能部署在IIS上 3 不是开源的,但可以被任意一个了解XML的人使用 SOAP :简单对象访问协议Si ...
- CentOS 7关闭firewalld启用iptables 开放端口
在CentOS7中,有很多CentOS 6中的常用服务发生了变化. 其中iptables是其中比较大的一个.防火墙iptables被firewalld取代. 本文将介绍,如果采用systemctl关闭 ...
- pytorch(05)计算图
张量的一系列操作,增多,导致可能出现多个操作之间的串行并行,协同不同的底层之间的协作,避免操作的冗余.计算图就是为了解决这些问题产生的. 计算图与动态图机制 1. 计算图 计算图用来描述运算的有向无环 ...
- 2020 年安装 FreeBSD 系统的基础视频
B 站搜索 BV14i4y137mh 包含了下载,虚拟机安装,配置 SSH 等教程. https://www.bilibili.com/video/BV14i4y137mh
- HashMap源码阅读(小白的java进阶)
OverView 构造方法 //构造方法 public HashMap(int initialCapacity, float loadFactor) { if (initialCapacity < ...
- 2019 GDUT Rating Contest II : Problem C. Rest Stops
题面: C. Rest Stops Input file: standard input Output file: standard output Time limit: 1 second Memory ...
- P1200_你的飞碟在这儿(JAVA语言)
题目描述 众所周知,在每一个彗星后都有一只UFO.这些UFO时常来收集地球上的忠诚支持者. 不幸的是,他们的飞碟每次出行都只能带上一组支持者.因此,他们要用一种聪明的方案让这些小组提前知道谁会被彗星带 ...
- c++ 反汇编 除法优化
接上篇:<C++反汇编与逆向分析技术揭秘>--算术运算和赋值 printf("argc / 4 = %d\n", argc / 4); printf("arg ...
- 攻防世界 resver catch-me
catch-me asis-ctf-quals-2016 附件给了个压缩包文件,重命名,解压,获取到elf文件 程序有两处关键比较 第一处: 这里进行动态调试,得到v3=0xB11924E1, byt ...