题意:

     可以这样理解,有一条直线,然后用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. 关于《Android编程权威指南》的MockWalker在模拟器中无法运行的解决方法

    1.打开模拟器中的Dev Settings应用. 2.选中Allow mock locations选项. 之后应该就能正常运行了.

  2. iot漏洞mips汇编基础

    1 基础概念 MIPS(Microprocessor without Interlocked Piped Stages architecture),是一种采取精简指令集(RISC)的处理架构,由MIP ...

  3. Kibana 插件环境搭建教程

    原文 环境背景, Kibana 7.4.0, Elasticsearch 7.4.0 注意, 执行以下命令时, 尽量在管理员权限的命令行窗口里执行, 避免一些没有权限的报错; 1. 准备 Kibana ...

  4. Picgo + Gitee +Typora(自动上传)搭建markdown免费图库

    Picgo + Gitee +Typora(自动上传)搭建markdown免费图库 前言: ​ 在写博客的是时候,之前那都是直接在博客网站上面写好了,再一一插入图片,当要在同时2个以上的博客上面发表的 ...

  5. JS五种绑定彻底弄懂this,默认绑定、隐式绑定、显式绑定、new绑定、箭头函数绑定详解(转载)

    目录 壹 ❀ 引 贰 ❀ this默认绑定 叁 ❀ this隐式绑定 1.隐式绑定 2.隐式丢失 肆 ❀ this显式绑定 伍 ❀ new绑定 陆 ❀ this绑定优先级 柒 ❀ 箭头函数的this ...

  6. WPF 基础 - 事件

    1. 前言 WPF 事件的路由环境是 UI 组件树,先来看看这棵树. 1.1 Logical Tree 和 Visual Tree WPF 中的树有两种,一颗是逻辑树,另一颗也是逻辑树. 开玩笑,WP ...

  7. css字体的属性

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  8. python两个字典相加

    x = {"a":1,"b":2} 2 y = {"c":3} 3 from collections import Counter 4 X, ...

  9. Cable Protection

    题目大意:求一颗基环树的最小点覆盖. 题解:其实是一道比较板子的树形dp,dp[i][0/1]表示取或者不取i点的最小点.但是首先我们要把基环树断开,然后分别考虑a被覆盖和b被覆盖的情况. dp[i] ...

  10. SQL注入与参数化查询

    SQL注入的本质 SQL注入的实质就是通过SQL拼接字符串追加命令,导致SQL的语义发生了变化.为什么发生了改变呢? 因为没有重用以前的执行计划,而是对注入后的SQL语句重新编译,然后重新执行了语法解 ...