1682. [HAOI2014]贴海报

★★☆   输入文件:ha14d.in   输出文件:ha14d.out   简单对比
时间限制:1 s   内存限制:256 MB

【题目描述】

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

张贴规则如下:

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

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

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

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

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

【输入格式】

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

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

【输出格式】

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

【样例输入】

100 5

1 4

2 6

8 10

3 4

7 10

【样例输出】

4

【提示】

【约束条件】

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

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

 思路:

  1)首先这道题暴力可以拿80分!(在luogu上可以AC!!!!)

  2)然后考场上作死写了个并查集。。。61分

  3)正解:

      ①线段树(然而我没写~)

      ②浮水法

坑点:

  因为给出的是所位于的块,不是左右端点,所以在处理浮水法的时候记得要右端点+1,或者左端点-1

上代码:

1)暴力

#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
using namespace std; const int M = 1e7 + ;
int n,m,l,r,ans;
int a[M],v[M]; inline int reads()
{
int x=,f=;char ch=getchar();
while(ch<'' || ch>'')
{if(ch=='-') f=-;ch=getchar();}
while(ch>='' && ch<='')
{x=*x+ch-'';ch=getchar();}
return x*f;
} int main()
{
freopen("ha14d.in","r",stdin);
freopen("ha14d.out","w",stdout);
n=reads(),m=reads();
for(int i=;i<=m;i++)
{
l=reads(),r=reads();
if(r<l) swap(l,r);
for(int j=l;j<=r;j++)
a[j]=i;
}
for(int i=;i<=n;i++)
{
if(!v[a[i]] && a[i])
{
ans++;
v[a[i]]=;
}
}
printf("%d",ans);
return ;
}

2)作死并查集

#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio> using namespace std; inline int reads()
{
int x=,f=;char ch=getchar();
while(ch<'' || ch>'')
{if(ch=='-') f=-;ch=getchar();}
while(ch>='' && ch<='')
{x=*x+ch-'';ch=getchar();}
return x*f;
} const int M = 1e7 + ; ///多开几个
const int N = ;
int n,m;
int f[M];
int ans[M],anse;
int Ls[N],Rs[N]; int getf(int x)
{return f[x] == x ? x : f[x] = getf(f[x]);} int main()
{
freopen("ha14d.in","r",stdin);
freopen("ha14d.out","w",stdout);
n=reads();m=reads(); ///n是n块,不是左右端点!!!
for(int i=;i<=n+;i++)
f[i]=i;
for(int i=;i<=m;i++) ///m组数据
{ ///手动从1开始,从0不会...
Ls[i]=reads();
Rs[i]=reads()+; ///因为给出不是点的坐标,是块的坐标
}
int l,r;
for(int i=m;i>=;i--) ///逆序张贴,因为只需要的是最后的能看到的海报
{
l=Ls[i],r=Rs[i]; ///左右端点
if(l>r) swap(l,r); ///maybe?会出现"left">"right"的情况(考虑最坏情况,以防万一,以前做过一个题就是恶心的数据!)
for(int j=getf(l);j<=r;j=getf(j+))
{
f[getf(j)]=getf(j+); ///将当前被张贴报纸的父结点手动设置到最后一个的父结点
/// ans[j]=i;
ans[i]++;
if(getf()==n+) break; ///表示已经贴完
}
} for(int i=;i<=n+;i++)
{
/// printf("%d=%d\n",i,ans[i]); ///输出调试???
if(ans[i]) anse++;
}
printf("%d\n",anse); return ;
}

3)正解(浮水法)

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std; const int M = ;
int n,m,ans=;
bool v[M]; struct U {
int l,r,id;
//id 为第几张海报
}t[M]; inline int reads()
{
int x=,f=;char ch=getchar();
while(ch<'' || ch>'')
{if(ch=='-') f=-;ch=getchar();}
while(ch>='' && ch<='')
{x=*x+ch-'';ch=getchar();}
return x*f;
} void swim(int ql,int qr,int nowid,int preid)
{
if(v[preid])
return;
while(nowid<=m && (qr<=t[nowid].l || ql>=t[nowid].r))
nowid++;
if(nowid>m)
{
v[preid]=true;
ans++;
return;
}
if(ql<t[nowid].l && qr>t[nowid].l)
swim(ql,t[nowid].l,nowid+,preid);
if(ql<t[nowid].r && qr>t[nowid].r)
swim(t[nowid].r,qr,nowid+,preid);
} int main()
{
freopen("ha14d.in","r",stdin);
freopen("ha14d.out","w",stdout);
n=reads();m=reads();
for(int i=;i<=m;i++)
{
t[i].l=reads(),t[i].r=reads()+;
t[i].id=i;
}
for(int i=m-;i>=;i--)
swim(t[i].l,t[i].r,i+,i);
printf("%d",ans);
return ;
}

cogs1682. [HAOI2014]贴海报 x的更多相关文章

  1. 【题解】Luogu P3740 [HAOI2014]贴海报

    woc,今天已经是day -1了 再写一颗珂朵莉树来++rp吧 否则就要AFO了qaq 这有可能是我最后一篇题解/博客qaq 原题传送门:P3740 [HAOI2014]贴海报 考前刷水题到底是对还是 ...

  2. 1682. [HAOI2014]贴海报

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

  3. Luogu P3740 [HAOI2014]贴海报_线段树

    线段树版的海报 实际上这个与普通的线段树相差不大,只是貌似数据太水,暴力都可以过啊 本来以为要离散的,结果没打就A了 #include<iostream> #include<cstd ...

  4. 洛谷P3740 【[HAOI2014]贴海报】

    (呃...本蒟蒻的第一篇题解qwq)..不废话了讲正题..思路来源于铺地毯(-->传送门)..先算出每一个格子上覆盖的海报并把可见的海报做标记然后算出有多少海报是可见的..但是作为省选题怎么可能 ...

  5. BZOJ5168: [HAOI2014]贴海报 线段树

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

  6. 洛谷P3740 [HAOI2014]贴海报

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

  7. 【线段树】【P3740】 [HAOI2014]贴海报

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

  8. 洛谷 P3740 [HAOI2014]贴海报

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

  9. [haoi2014]贴海报

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

随机推荐

  1. python网络爬虫(12)去哪网酒店信息爬取

    目的意义 爬取某地的酒店价格信息,示例使用selenium在Firefox中的使用. 来源 少部分来源于书.python爬虫开发与项目实战 构造 本次使用简易的方案,模拟浏览器访问,然后输入字段,查找 ...

  2. redis 学习(12)-- redis 发布订阅

    redis 发布订阅 发布订阅模式中的角色 发布者(publisher) 订阅者(subscriber) 频道(channel) 如图所示: 发布者发布消息到频道,订阅了频道的订阅者可以收到消息,订阅 ...

  3. sql server row_number分页

    row_number分页 SELECT  TOP 10* --pageSize =10FROM (  SELECT    *, row_number () OVER (ORDER BY a.bsqID ...

  4. c# ListView 简单操作

    1. 添加数据 listView1.Items.Clear(); for (int i = 0; i < 50; i++) { ListViewItem lv = new ListViewIte ...

  5. 给Repater增加等号

    //不改变数据结构的情况下,增加行号.对Application服务器压力增大,减少DB服务器压力.    protected void repShow_ItemDataBound(object sen ...

  6. 一次MySQL两千万数据大表的优化过程,三种解决方案

    问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...

  7. Vue中如何插入m3u8格式视频,3分钟学会!

    ​        大家都知道video只支持ogg.webm.MP4格式,但是要是m3u8格式的视频怎么办?最近遇到这个问题在网上找了好多办法都不行,最后找到video.js后才完美解决,所以决定写一 ...

  8. JS中的事件传播流程

    JS中的事件传播流程 1,Javascript与HTML之间的交互是通过事件实现的. 事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间. 可以使用侦听器来预定事件,以便事件发生时执行相应代码. 2 ...

  9. 关于Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file: 11043的解决办

    Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file: /tmp/hsperfdat ...

  10. RouterOS Firewall v6 流程图

    1. Firewall v5和Firewall v6对比图 2.Firewall v6的流程图