题意:

     可以这样理解,有一条直线,然后用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线段树段更新逆序异或(广告牌)的更多相关文章

  1. POJ2828线段树单点更新——逆序更新

    Description 输入n个有序对< pi, vi >,pi表示在第pi个位置后面插入一个值为vi的人,并且pi是不降的.输出最终得到的v的序列 Input 多组用例,每组用例第一行为 ...

  2. UVA11992不错的线段树段更新

    题意:       给你一个矩阵,最大20*50000的,然后有三个操作 1 x1 y1 x2 y2 v  把子矩阵的值全部都加上v 2 x1 y1 x2 y2 v  把子矩阵的值全部都变成v 2 x ...

  3. hdu4267线段树段更新,点查找,55棵线段树.

    题意:      给你N个数,q组操作,操作有两种,查询和改变,查询就是查询当前的这个数上有多少,更改是给你a b k c,每次从a到b,每隔k的数更改一次,之间的数不更改,就相当于跳着更新. 思路: ...

  4. hdu1556 线段树段更新(简单题)

    题意: N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动车从气球a开始到气球b依次给每个 ...

  5. POJ3277 线段树段更新,点询问+二分离散化+暴力

    题意:       x轴上有一些矩形,问你这些矩形覆盖的面积和是多少. 思路:       首先范围很大,n很小,果断离散化,然后我们就是求出任意区间的最大值作为当前区间的高,最后在算一遍答案就行了, ...

  6. POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和)

    POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和) 题意分析 卡卡屋前有一株苹果树,每年秋天,树上长了许多苹果.卡卡很喜欢苹果.树上有N个节点,卡卡给他们编号1到N,根 ...

  7. POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化)

    POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化) 题意分析 前置技能 线段树求逆序对 离散化 线段树求逆序对已经说过了,具体方法请看这里 离散化 有些数 ...

  8. HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对)

    HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对) 题意分析 给出n个数的序列,a1,a2,a3--an,ai∈[0,n-1],求环序列中逆序对 ...

  9. POJ-2528 Mayor's posters(线段树区间更新+离散化)

    http://poj.org/problem?id=2528 https://www.luogu.org/problem/UVA10587 Description The citizens of By ...

随机推荐

  1. 小程序基于Token登录 示意图

  2. 【Arduino学习笔记04】消抖动的按键切换

    "开关抖动": 由于按键是基于弹簧-阻尼系统的机械部件,所以当按下一个按键时,读到的信号并不是从低到高,而是在高低电平之间跳动几毫秒之后才最终稳定. 代码解读: 1 const i ...

  3. There only 10 people use the same phone as you(i春秋CTF题解)

      (1)访问网址进行CTF测试,仅出现登陆与注册的页面 (2)进行注册尝试登陆并进行burp抓取数据包: (3)注册成功,进行登陆尝试查看信息是否具有提示,在登录的页面只有两个点击页面,一个为:Ch ...

  4. io流(文件字符流(FileReader,FileWriter文件的复制))

    文件字符流(FileReader,FileWriter文件的复制) 文件的复制 效率低的方法 注意:字符流需要刷新操作,字节流不需要,只有刷新后才可以将程序中的内容导入到目标文件中 package c ...

  5. Linux系统浮动IP的配置

    什么是浮动IP,为什么要配置浮动IP 首先说一下为什么要配置浮动IP. 原文链接:https://blog.csdn.net/readiay/article/details/53538085 现在有一 ...

  6. 「HTML+CSS」--自定义按钮样式【002】

    前言 Hello!小伙伴! 首先非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 哈哈 自我介绍一下 昵称:海轰 标签:程序猿一只|C++选手|学生 简介:因C语言结识编程,随后转入计算机 ...

  7. greenplum6.14、GPCC6.4安装详解

    最近在做gp的升级和整改,所以把做的内容整理下,这篇文章主要是基于gp6.14的安装,主要分为gp,gpcc,pxf的一些安装和初始化.本文为博客园作者所写: 一寸HUI,个人博客地址:https:/ ...

  8. ( ) 与 { } 差在哪?-- Shell十三问<第七问>

    ( ) 与 { } 差在哪?-- Shell十三问<第七问> 先说一下,为何要用 ( ) 或 { } 好了. 许多时候,我们在 shell 操作上,需要在一定条件下一次执行多个命令,也就是 ...

  9. [Fundamental of Power Electronics]-PART I-2.稳态变换器原理分析-2.4 Cuk变换器实例

    2.4 Cuk 变换器 作为第二个示例,考虑图2.20(a)的变换器.该变换器执行类似于降压-升压变换器的直流转换功能:它可以增加或减小直流电压的幅值,并且可以反转极性.使用晶体管和二极管的实际实现如 ...

  10. Spring Security Oauth2 认证(获取token/刷新token)流程(password模式)

    https://blog.csdn.net/bluuusea/article/details/80284458