题目

题目描述

Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论。为了统一管理,城市委员会为选民准备了一个张贴海报的electoral墙。

张贴规则如下:

  1. electoral墙是一个长度为N个单位的长方形,每个单位记为一个格子;

  2. 所有张贴的海报的高度必须与electoral墙的高度一致的;

  3. 每张海报以“A B”表示,即从第A个格子到第B个格子张贴海报;

  4. 后贴的海报可以覆盖前面已贴的海报或部分海报。

现在请你判断,张贴完所有海报后,在electoral墙上还可以看见多少张海报。

输入格式

第一行: N M 分别表示electoral墙的长度和海报个数

接下来M行: Ai Bi 表示每张海报张贴的位置

输出格式

输出贴完所有海报后,在electoral墙上还可以看见的海报数。

输入输出样例

输入 #1复制

100 5
1 4
2 6
8 10
3 4
7 10

输出 #1复制

4

说明/提示

注:图片来源:洛谷

【约束条件】

1 0<= N <= 10000000 1<=M<=1000 1<= Ai <= Bi <=10000000

所有的数据都是整数。数据之间有一个空格

分析

还有一种方法:浮水法:题解 P3740 【[HAOI2014]贴海报】

一个很妙的逆向思维
如果正向思考,覆盖的时候绞尽脑汁消除覆盖,很麻烦
看最后露出来的,只要前面没挡到,就会露出来,例如:

可以存入空白,倒向操作,只要覆盖了空白的海报,就会露出来
但在离散化的时候会出错,比如:
8 3
3 6
1 3
6 7

本来是:


离散化后3与6相邻,答案本应3,输出为2,变成了:


解决方法:在离散化时,不是消去中间,而是将中间距离大于1的变为1
注意数组大小

代码

  1 /**************************
  2 User:Mandy.H.Y
  3 Language:c++
  4 Problem:luogu3740
  5 Algorithm:线段树 + 离散化
  6 **************************/
  7
  8 // 一个很妙的逆向思维
  9 //如果正向思考,覆盖的时候绞尽脑汁消除覆盖,很麻烦
 10 //看最后露出来的,只要前面没挡到,就会露出来
 11 //可以存入空白,倒向操作,只要覆盖了空白的海报,就会露出来
 12 //但在离散化的时候会出错,比如:
 13 //8 3
 14 //3 6
 15 //1 3
 16 //6 7
 17 //离散化后3与6相邻,答案本应3,输出为2
 18 //解决方法:在离散化时,不是消去中间,而是将中间距离大于1的变为1
 19 //注意数组大小
 20
 21
 22 #include<bits/stdc++.h>
 23 #define Max(x,y) ((x) > (y) ? (x) : (y))
 24 #define Min(x,y) ((x) < (y) ? (x) : (y))
 25 #define lson l,mid,k<<1
 26 #define rson mid + 1,r,k<<1|1
 27
 28 using namespace std;
 29
 30 const int maxm = 2005;
 31 int n,m,ans,judge = 0;
 32 int tree[maxm << 4];
 33
 34 struct Poster{
 35     int l,r;
 36 }pos[maxm];
 37
 38 struct Temp{
 39     int l,id;
 40     bool operator < (const Temp &a)const {
 41         return l < a.l;
 42     }
 43 }tmp[maxm << 1];
 44
 45 template<class T>inline void read(T &x) {
 46     x = 0;bool flag = 0;char ch = getchar();
 47     while(!isdigit(ch)) flag |= ch == '-',ch = getchar();
 48     while(isdigit(ch)) x = (x << 1) + (x << 3) + (ch ^ 48),ch = getchar();
 49     if(flag) x = -x;
 50 }
 51
 52 template<class T>void putch(const T x) {
 53     if(x > 9) putch(x / 10);
 54     putchar(x % 10 | 48);
 55 }
 56
 57 template<class T>void put(const T x) {
 58     if(x < 0) putchar('-'),putch(-x);
 59     else putch(x);
 60 }
 61
 62 void file() {
 63     freopen("3740.in","r",stdin);
 64 //    freopen("2161.out","w",stdout);
 65 }
 66
 67 void readdata() {
 68     read(n);read(m);
 69 }
 70
 71 void pushup(int k){
 72     tree[k] = tree[k<<1] + tree[k<<1|1];
 73 }
 74
 75 void pushdown(int k){
 76     if(!tree[k]){
 77         tree[k<<1] = 0;
 78         tree[k<<1|1] = 0;
 79     }//标记下放
 80 }
 81
 82 void buildtree(int l,int r,int k){
 83     if(l == r){
 84         tree[k] = 1;
 85         return;
 86     }
 87     int mid = (l + r) >> 1;
 88     buildtree(lson);
 89     buildtree(rson);
 90     pushup(k);
 91 }
 92
 93 void modify(int l,int r,int k,int x,int y){
 94     if(x <= l && r <= y){
 95         if(tree[k]) judge = 1;
 96         tree[k] = 0;
 97         return;
 98     }
 99     pushdown(k);
100     int mid = (l + r) >> 1;
101     if(x <= mid) modify(lson,x,y);
102     if(y > mid) modify(rson,x,y);
103     pushup(k);
104 }
105
106 void work() {
107     int cnt = 0;
108     for(int i = 1;i <= m ; ++ i){
109         read(tmp[++cnt].l);tmp[cnt].id = i;
110         read(tmp[++cnt].l);tmp[cnt].id = i;
111     }
112
113     sort(tmp + 1,tmp + cnt + 1);
114     int tot = 0;//去重 及 变为1
115     for(int i = 1;i <= cnt; ++ i){
116         int id = tmp[i].id;
117         if(tmp[i].l != tmp[i - 1].l){
118             if(tmp[i].l - tmp[i - 1].l > 1) ++tot;
119             if(pos[id].l) pos[id].r = ++tot;
120             else pos[id].l = ++tot;
121         } else {
122             if(pos[id].l) pos[id].r = tot;
123             else pos[id].l = tot;
124         }
125
126     }
127
128     buildtree(1,tot,1);
129
130     for(int i = m;i >= 1; -- i){
131         judge = 0;
132         modify(1,tot,1,pos[i].l,pos[i].r);
133         if(judge) ans++;
134     }
135     put(ans);
136 }
137
138 int main() {
139 //    file();
140     readdata();
141     work();
142     return 0;
143 }

View Code

转载于:https://www.cnblogs.com/Mandy-H-Y/p/11403441.html

luogu 3740 [HAOI2014] 贴海报相关推荐

  1. 1682. [HAOI2014]贴海报

    1682. [HAOI2014]贴海报 ★★☆   输入文件:ha14d.in   输出文件:ha14d.out   简单对比 时间限制:1 s   内存限制:256 MB [题目描述] Byteto ...

  2. [HAOI2014] 贴海报

    题目描述: 线段树覆盖题目- 题目分析: 离散化+线段树区间更新,最后直接遍历一下整个线段树,把标记全部下放一下,最后O1查询就好了- 题目链接: BZOJ 5168 Luogu 3740 Ac 代码 ...

  3. [HAOI2014]贴海报

    这道题我也是用线段树做的,也是区间覆盖. 比较好想首先读入所有输入,倒序处理,对于一张海报,查询其对应区间有没有被完全覆盖,完全覆盖表示后面贴的那些海报会将这张海报完全盖住,否则的话,这张海报就会被看 ...

  4. HAOI2014 贴海报 浮水法

    好久没更博客了,最近回来刷题.今天做了一道2014年河南省选[贴海报],用到了浮水法,写篇博客. 适用:浮水法主要使用于有覆盖的染色问题. 方法本身的思想不难理解:(以[贴海报]为背景)想象所有的海报 ...

  5. 【HAOI2014】贴海报

    弱省中的弱省-- 原题: Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论.为了统一管理,城市委员会为选民准备了一个张贴海报的electoral墙. 张贴规则如下 ...

  6. luogu P1549 棋盘问题(2) 题解

    luogu P1549 棋盘问题(2) 题解 题目描述 在\(N * N\)的棋盘上\((1≤N≤10)\),填入\(1,2,-,N^2\)共\(N^2\)个数,使得任意两个相邻的数之和为素数. 例如 ...

  7. [Luogu] 选学霸

    https://www.luogu.org/problemnew/show/P2170 并查集+DP #include <iostream> #include <cstring> ...

  8. Luogu 2470 [SCOI2007]压缩

    和Luogu 4302 [SCOI2003]字符串折叠 差不多的想法,区间dp 为了计算方便,我们可以假设区间[l, r]的前面放了一个M,设$f_{i, j, 0/1}$表示区间$[i, j]$中是 ...

  9. 小程序画布画海报保存成图片可以保存实现完整代码

    老规矩先来个效果图: 因为是截图所以会有些模糊,在真机上会比较清晰 下面针对效果图来看看里面都画了什么元素,代码在文章的最后,大家想直接拷代码可以略过这,这里是方便大家理解代码. 首先,咱们的海报有几 ...

最新文章

  1. Linux 查看交换区内容,Unix: Unix/Linux/Win的虚拟交换区信息的查看
  2. 6. ZigZag Conversion
  3. UVa563 - Crimewave
  4. MAC Opencv include选择
  5. Hyperledger Fabric 1.0 从零开始(十二)——fabric-sdk-java应用【补充】
  6. Professional C# 6 and .NET Core 1.0 - Chapter 43 WebHooks and SignalR
  7. 常见Linux版本概览
  8. 3. Magento 模板制作
  9. C++中在使用自定义类型(结构体类型)的stl数据结构时,operate的用法
  10. 适配器自动分配的169开头的地址_代理ip地址怎么换
  11. vim打开bin文件
  12. matlab ss2ss,Zemax+DDE+toolbox+for+Matlab 该工具箱可实现matlab编程和zemax通信 - 下载 - 搜珍网...
  13. 龙芯电脑手动编译安装gcc9.3编译器
  14. kali工具之Beef
  15. 送书福利|少儿编程能够一玩就会吗?够胆量的家长,让孩子打卡30天玩会编程!...
  16. oracle使用text类型,oracle数据库中text类型用什么类型表示
  17. 正则表达式--常用用法及lookahead、lookbehind
  18. 携手并进,利尔达科技集团与中国计量大学举办捐赠签约仪式
  19. 《软技能 代码之外的生存指南》
  20. DVB-S2工作总结

热门文章

  1. Zabbix自动发现规则
  2. 金仓数据库 KingbaseES 异构数据库移植指南 (4. 应用迁移流程)
  3. xp系统桌面计算机不见了怎么办,xp我的电脑图标没了怎么办,xp系统桌面图标不见了...
  4. 国家企业信用信息公示系统每年申报登录提示账号不存在【山东】
  5. Windows部分快捷键命令/命令
  6. 利用LabVIEW开发应变量测试
  7. 我的人生就是一次次世界杯串起来的
  8. 4G信号变卡的主要原因
  9. Java实现 蓝桥杯 算法训练 删除数组零元素
  10. VS2012中的R6002 - floating point support not loaded错误