注意离散化!!!线段树的叶子结点代表的是一段!!!

给出下面两个简单的例子应该能体现普通离散化的缺陷:

1-10 1-4 5-10

1-10 1-4 6-10

普通离散化算出来的结果都会是2,但是第二组样例结果是3

如果相邻数字间距大于1的话,在其中加上任意一个数字,比如加成[1,2,3,6,7,10],然后再做线段树就好了.

线段树功能:update 成段更新,query 查询整个线段树

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
using namespace std; const int MAXN = 20010;
int p[MAXN], mp[MAXN], pp[MAXN];
int pst[MAXN<<4], ans;
bool flag[MAXN]; bool cmp(int A, int B)
{
return p[A] < p[B];
} void push_down(int rt)
{
if(pst[rt] == 0) return;
pst[rt<<1] = pst[rt<<1|1] = pst[rt];
pst[rt] = 0;
} void update(int L, int R, int c, int l, int r, int rt)
{
if(L <= l && r <= R)
{
pst[rt] = c;
return;
}
push_down(rt);
int m = (l + r) >> 1;
if(m >= L) update(L, R, c, lson);
if(m < R) update(L, R, c, rson);
} void query(int l, int r, int rt)
{
if(pst[rt] > 0) //只有大于0才有海报
{
if(!flag[pst[rt]]) ans++;
flag[pst[rt]] = 1;
return;
}
if(l == r) return;
push_down(rt);
int m = (l + r) >> 1;
query(lson);
query(rson);
} int main()
{
// freopen("in.txt", "r", stdin);
int T, n;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
for(int i=0; i<n; i++)
{
scanf("%d%d", &p[i<<1], &p[i<<1|1]);
mp[i<<1] = i<<1;
mp[i<<1|1] = i<<1|1;
}
sort(mp, mp+2*n, cmp);
pp[mp[0]] = 1;
int N = 1;
for(int i=1; i<2*n; i++) //离散化
{
if(p[mp[i]] == p[mp[i-1]])
pp[mp[i]] = N;
else if(p[mp[i]] - p[mp[i-1]] > 1) //大于1的插一个数
{
N += 2;
pp[mp[i]] = N;
}
else pp[mp[i]] = ++N;
}
memset(pst, 0, sizeof(pst));
for(int i=0; i<n; i++)
update(pp[i<<1], pp[i<<1|1], i+1, 1, N, 1);
memset(flag, 0, sizeof(flag));
ans = 0;
query(1, N, 1);
printf("%d\n", ans);
}
return 0;
}

POJ 2528 Mayor's posters 贴海报 线段树 区间更新的更多相关文章

  1. POJ - 2528 Mayor's posters (离散化+线段树区间修改)

    https://cn.vjudge.net/problem/POJ-2528 题意 给定一些海报,可能相互重叠,告诉你每个海报的宽度(高度都一样的)和先后叠放顺序,问没有被完全盖住的有多少张? 分析 ...

  2. poj 3468 A Simple Problem with Integers (线段树区间更新求和lazy思想)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 75541   ...

  3. HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023 解题报告:一面墙长度为n,有N个单元,每个单元编号从1到n,墙的初始的颜色是2,一共有30种颜色 ...

  4. (简单) POJ 3468 A Simple Problem with Integers , 线段树+区间更新。

    Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...

  5. [POJ] 3468 A Simple Problem with Integers [线段树区间更新求和]

    A Simple Problem with Integers   Description You have N integers, A1, A2, ... , AN. You need to deal ...

  6. A Corrupt Mayor's Performance Art(线段树区间更新+位运算,颜色段种类)

    A Corrupt Mayor's Performance Art Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 100000/100 ...

  7. POJ 3468 A Simple Problem with Integers(线段树区间更新)

    题目地址:POJ 3468 打了个篮球回来果然神经有点冲动. . 无脑的狂交了8次WA..竟然是更新的时候把r-l写成了l-r... 这题就是区间更新裸题. 区间更新就是加一个lazy标记,延迟标记, ...

  8. POJ 3468 A Simple Problem with Integers(线段树区间更新,模板题,求区间和)

    #include <iostream> #include <stdio.h> #include <string.h> #define lson rt<< ...

  9. POJ 3468 A Simple Problem with Integers 线段树 区间更新

    #include<iostream> #include<string> #include<algorithm> #include<cstdlib> #i ...

随机推荐

  1. 强哥memcache学习笔记

    搭建memcache服务器:1.在内存中缓存数据2.数据形态以key->value memcache优点:1.快速缓存2.跨域登录memcache缺点:1.复杂的数据存取的操作2.不能永久保存数 ...

  2. suse12 设置ssh 远程连接

    前提:已安装相应的sshd软件包. 编辑sshd_config文件:vim /etc/ssh/sshd_config PermitRootLogin yes PasswordAuthenticatio ...

  3. Sqoop 安装部署

    1. 上传并解压 Sqoop 安装文件 将 sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz 安装包上传到 node-01 的 /root/ 目录下并将其解压 [root@no ...

  4. 033.Python的__del__析构方法he__call__方法

    一 __del__ 魔术方法(析构方法) 1.1 介绍 触发时机:当对象被内存回收的时候自动触发[1.页面执行完毕回收所有变量 2.所有对象被del的时候] 功能:对象使用完毕后资源回收 参数:一个s ...

  5. python 如何让俩个对象相等及如何让俩个对象具有相同的id值

  6. 技术干货 | 关于 WKWebview 网络拦截,你想知道的都在这里

    原生 WKWebView 在独立于 app 进程之外的进程中执行网络请求,请求数据不经过主进程,因此在 WKWebView 上直接使用 NSURLProtocol 是无法拦截请求的. 但是由于 mPa ...

  7. 达芬奇架构NPU

    达芬奇架构NPU 达芬奇架构的核心优势是什么?如何更好地赋能麒麟990? 达芬奇架构,是华为自研的面向AI计算特征的全新计算架构,具备高算力.高能效.灵活可裁剪的特性,是实现万物智能的重要基础.具体来 ...

  8. Docker Buildx插件

    Docker Buildx插件 Overview Docker Buildx是一个CLI插件,它扩展了Docker命令,完全支持Moby BuildKit builder toolkit提供的功能.它 ...

  9. 使用NVIDIA A100 TF32获得即时加速

    使用NVIDIA A100 TF32获得即时加速 NVIDIA A100带来了我们公司历史上最大的单代性能增长.这是一个新的结构创新,这是一个多功能的支持,这是一个多功能的结构支持.TF32是用于深度 ...

  10. swagger 注解使用

    @Api() 用于类:表示标识这个类是swagger的资源 tags–表示说明 value–也是说明,可以使用tags替代 但是tags如果有多个值,会生成多个list @ApiOperation() ...