P3740 贴海报

很显然,这个题是让我们维护一个区间的信息

可以考虑线段树。可是这个题,正向思维可能并不可做。

所以我们考虑逆向思维。

打个比方,你是一名保洁人员。面对已经粘在墙上的,大大小小的广告。你想要将他们撕下来。

而且你是一个有点强迫症的的人(溜

你总是每天快要下班时打扫,而且他们贴小广告的顺序你也都知道。而且特别强迫症地必须按照顺序,一张一张地撕下来。

有可能你撕小广告的时候,一张小广告已经被撕成好多条,但你还是要必须将这几条一起撕下来。

为了消遣,你想知道你一共撕下来多少张小广告(重叠的算一张)

就像这样:

你将最后贴的一张撕下来,变成了这样:

,这就算一次

然后需要离散化

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int manx=1100;
int val[manx<<2],tag[manx<<2];
int data[manx<<1],tail;
int base[manx<<1],k;
struct node
{
int l,r;
};
node line[manx];
void make_base()
{
int now=-0x7fffffff;
for(int i=1;i<=tail;i++)
if(now!=data[i])
{
now=data[i];
base[++k]=now;
}
return ;
}
int find(int val)
{
int l=1,r=k;
int mid;
while(l<r)
{
mid=(l+r)>>1;
if(base[mid]<val) l=mid+1;
else r=mid;
}
return l;
}
void build(int root,int l,int r)
{
val[root]=base[r+1]-base[l];
tag[root]=0;
if(l==r) return ;
int mid=(l+r)>>1;
build(root<<1,l,mid);
build(root<<1|1,mid+1,r);
}
void push_down(int root)
{
if(tag[root])
{
val[root<<1]=0;val[root<<1|1]=0;
tag[root<<1]=1;tag[root<<1|1]=1;
tag[root]=0;
}
return ;
}
void push_up(int root)
{
val[root]=val[root<<1]+val[root<<1|1];
return ;
}
int check(int root,int l,int r,int al,int ar)
{
if(l>ar||r<al) return 0;
if(l>=al&&r<=ar) return val[root];
int mid=(l+r)>>1;
push_down(root);
return check(root<<1,l,mid,al,ar)+
check(root<<1|1,mid+1,r,al,ar);
}
void updata(int root,int l,int r,int al,int ar)
{
if(l>ar||r<al) return ;
if(l>=al&&r<=ar)
{
val[root]=0;
tag[root]=1;
return ;
}
int mid=(l+r)>>1;
push_down(root);
updata(root<<1,l,mid,al,ar);
updata(root<<1|1,mid+1,r,al,ar);
push_up(root);
return ;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int a,b;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
data[++tail]=a;
data[++tail]=b+1;
line[i].l=a;line[i].r=b+1;
}
sort(data+1,data+1+tail);
make_base();
build(1,1,k-1);
int ans=0;
for(int i=m;i>=1;i--)
{
int pos1=find(line[i].l),pos2=find(line[i].r);
if(check(1,1,k-1,pos1,pos2-1)) ans+=1;
updata(1,1,k-1,pos1,pos2-1);
}
printf("%d",ans);
}

P3740 贴海报的更多相关文章

  1. noip2017考前整理(未完)

    快考试了,把我以前写过的题回顾一下.Noip2007 树网的核:floyd,推出性质,暴力.Noip2008 笨小猴:模拟Noip2008 火柴棒等式:枚举Noip2008 传纸条:棋盘dpNoip2 ...

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

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

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

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

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

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

  5. 洛谷P3740 [HAOI2014]贴海报

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

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

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

  7. 洛谷 P3740 [HAOI2014]贴海报

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

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

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

  9. P3740 [HAOI2014]贴海报

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

随机推荐

  1. 几种IO情况的学习和总结 关于 =====阻塞/非阻塞以及同步/异步区别

    同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 背景是Linux环境下的network IO. 在进行解释 ...

  2. sort命令和对中文的处理

    使用示例:sort -k1,1nr xxxfile 需要指定起始列和结束列,否则可能排序错误   sort命令应用于中文时需要在sort前设置环境变量(以兼容C语言的标准): LC_COLLATE=C ...

  3. RTT之内存管理及异常中断

    内存管理分静态内存管理和动态内存管理(根据大小又分2种) 静态内存管理:创建.删除.初始化.解绑.申请和释放.初始化内存池是属于静态内存管理,与创建内存池不同的是,此处内存池对象所使用的内存空间是由用 ...

  4. [转]Passing data between pages in JQuery Mobile mobile.changePage

    本文转自:http://ramkulkarni.com/blog/passing-data-between-pages-in-jquery-mobile/ I am working on a JQue ...

  5. React.js 小书 Lesson4 - 前端组件化(三):抽象出公共组件类

    作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson4 转载请注明出处,保留原文链接和作者信息. 为了让代码更灵活,可以写更多的组件,我们把这种模 ...

  6. WEBAPI测试

    测试 #region 测试 [HttpPost] public HttpResponseMessage UserData(int userId, string userName) { var user ...

  7. 从今天开始学习Swift -- Swift 初见 (转)

    原文地址:http://www.cocoachina.com/newbie/basic/2014/0604/8675.html   Swift系列文章由CocoaChina翻译小组翻译自苹果的官方文档 ...

  8. Android大牛

    张鸿洋 http://blog.csdn.net/lmj623565791/article/category/2680597 CSDN 鸿洋:http://blog.csdn.net/lmj62356 ...

  9. 【起航计划 029】2015 起航计划 Android APIDemo的魔鬼步伐 28 App->Preferences->Default Values 偏好默认值

    DefaultValues 介绍了如何在XML中定义Preference的缺省值. <CheckBoxPreference android:key="default_checkbox& ...

  10. Struts2_总结

    还未学习的内容,如果到时候要用到,再去学.1.Lamda 表达式(很复杂,很少用)2.验证框架(默认验证方法 validation.方法开始前验证.开始后验证)3.UI标签(用的不多)4.类型转换中的 ...