BZOJ5029: 贴小广告 & BZOJ5168: [HAOI2014]贴海报
【传送门:BZOJ5029&BZOJ5168】
简要题意:
给出m段区间l[i],r[i],表示l[i]到r[i]的数全部变成i,求出最后有多少种不同的数
题解:
线段树+离散化
这是一道经典例题
先离散化l和r,注意如果离散的时候,两个值相差大于1,就要新加一个值
然后线段树维护区间颜色就行了
参考代码:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
struct trnode
{
int l,r,lc,rc,c;
}tr[];int len;
void bt(int l,int r)
{
len++;int now=len;
tr[now].l=l;tr[now].r=r;tr[now].c=-;
tr[now].lc=tr[now].rc=-;
if(l<r)
{
int mid=(l+r)/;
tr[now].lc=len+;bt(l,mid);
tr[now].rc=len+,bt(mid+,r);
}
}
bool v[];
void wen(int now,int l,int r)
{
if(tr[now].c!=-)
{
v[tr[now].c]=true;
return ;
}
int lc=tr[now].lc,rc=tr[now].rc,mid=(tr[now].l+tr[now].r)/;
if(r<=mid) wen(lc,l,r);
else if(l>mid) wen(rc,l,r);
else wen(lc,l,mid),wen(rc,mid+,r);
}
void change(int now,int l,int r,int k)
{
if(l==tr[now].l&&r==tr[now].r)
{
tr[now].c=k;
return ;
}
int lc=tr[now].lc,rc=tr[now].rc,mid=(tr[now].l+tr[now].r)/;
if(tr[now].c>)
{
tr[lc].c=tr[now].c;
tr[rc].c=tr[now].c;
}
if(r<=mid) change(lc,l,r,k);
else if(mid<l) change(rc,l,r,k);
else
{
change(lc,l,mid,k);
change(rc,mid+,r,k);
}
if(tr[lc].c==tr[rc].c&&tr[lc].c!=-) tr[now].c=tr[lc].c;
else tr[now].c=-;
}
struct ask
{
int l,r,c;
bool bk;
ask()
{
bk=false;
}
}A[];
struct LSnode
{
int y,p,op;
}w[];int tot;
bool cmp(LSnode n1,LSnode n2){return n1.y<n2.y;}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
tot=;
for(int i=;i<=m;i++)
{
scanf("%d%d",&A[i].l,&A[i].r);A[i].c=i;
if(A[i].l>n) A[i].bk=true;
if(A[i].r>n) A[i].r=n;
tot++;w[tot].y=A[i].l,w[tot].p=i;w[tot].op=;
tot++;w[tot].y=A[i].r,w[tot].p=i;w[tot].op=;
}
sort(w+,w++tot,cmp);
int tt=,mmax=;
for(int i=;i<=tot;i++)
{
if(w[i].y!=w[i-].y) tt++;
if(w[i].y!=w[i-].y+&&w[i].y!=w[i-].y) tt++;
if(w[i].op==) A[w[i].p].l=tt;
else A[w[i].p].r=tt;
}
len=;bt(,tt);tr[].c=-;
for(int i=;i<=m;i++) if(A[i].bk==false) change(,A[i].l,A[i].r,A[i].c);
memset(v,false,sizeof(v));
wen(,,tt);
int ans=;
for(int i=;i<=m;i++) if(v[i]==true) ans++;
printf("%d\n",ans);
return ;
}
BZOJ5029: 贴小广告 & BZOJ5168: [HAOI2014]贴海报的更多相关文章
- bzoj5029: 贴小广告&&bzoj5168: [HAOI2014]贴海报
以后做双精题请至少先跑个数据...输入都不一样... 做法就是离散化大力线段树. 记得在x+1和y-1插点 看这个数据: 1000 121 10050 8080 9950 981 56100 2002 ...
- bzoj5029 贴小广告
Description 现在有一堵墙,墙上分为若干个单元.接下来会来n个人在墙上贴小广告.每次每个人选择墙上连续一段的单元贴上自己公司与众不同的小广告.因为小广告可能会出现被覆盖的情况,由于公司之间存 ...
- BZOJ5168: [HAOI2014]贴海报 线段树
Description Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论.为了统一管理,城市委 员 会为选民准备了一个张贴海报的electoral墙.张贴规则如下 ...
- 从运营商小广告到HTTPS
相信很多人都试过这样的经历,浏览一个正常的网站时,右下突然角弹出一堆小广告,而且这些广告的内容和你浏览的网站格格不入: 前几天还有某微博用户爆料访问github时居然也有广告: 又或者,你有没有试过因 ...
- 【题解】Luogu P3740 [HAOI2014]贴海报
woc,今天已经是day -1了 再写一颗珂朵莉树来++rp吧 否则就要AFO了qaq 这有可能是我最后一篇题解/博客qaq 原题传送门:P3740 [HAOI2014]贴海报 考前刷水题到底是对还是 ...
- 1682. [HAOI2014]贴海报
1682. [HAOI2014]贴海报 ★★☆ 输入文件:ha14d.in 输出文件:ha14d.out 简单对比 时间限制:1 s 内存限制:256 MB [题目描述] Byteto ...
- PJzhang:关闭wps小广告和快速关闭445端口
猫宁!!! kali linux上安装的wps,没有广告,而且轻巧简洁. 如果你在windows上安装wps,除了ppt.word.excel,还会有一个h5的应用,当然,最令人烦扰的当 ...
- cogs1682. [HAOI2014]贴海报 x
1682. [HAOI2014]贴海报 ★★☆ 输入文件:ha14d.in 输出文件:ha14d.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] Bytetow ...
- 淘宝小广告的鼠标移上实现html, JavaScript代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- (2016北京集训十三)【xsy1533】mushroom - bitset
题解: 神题...我看到的时候直接吓懵了... 这是一道STL题...否则可能要写可持久化ETT或者可持久化Toptree? 用bitset来维护每个蘑菇上哪里有杂草,那么 对于操作1和操作2:可以预 ...
- BZOJ 2741 L (可持久化01Trie+分块)
题目大意:给你一个序列,共有$q$个询问,每次询问区间$[L,R]$内最大连续字段异或和,强制在线,$n<=12000,m<=5000$ 有个细节没处理好$WA$了好久..还有一次$ans ...
- HTTP——学习笔记(8)
HTTP中的一些协议内容会限制某些网站的功能使用 比如,Facebook这类的社交网站,需要实时地观察到海量用户公开发布的内容,而HTTP中的以下标准就会成为瓶颈: 一条连接上只可发送一个请求 请求只 ...
- vue安装踩坑系列
1.安装npm node环境 2.npm install vue-cli -g 安装vue-cli vue-V检测脚手架是否安装成功 3.vue init webpack vuecliTest 初始化 ...
- Solr4.10.2集成Nutch1.9与自带UI界面使用
Solr4.10.2集成Nutch1.9与自带UI界面使用 一.Solr4.10.2与Nutch1.9集成 环境:Solr4.10.2已经配置在Tomcat上 Solr的Tomcat配置详见Solr4 ...
- Linux硬链接和软链接的差别
1.硬链接文件和原文件指向相同的数据,两者就像克隆一样,inode号也相同,当删除原 文件时. 硬链接文件仍然存在有效. 但硬链接文件不同于文件的复制.应该说硬链接文件的产生仅仅是原文件所 在文件夹文 ...
- 从头认识Spring-1.16 SpEl对集合的操作(1)-建立集合以及訪问集合的元素,以<util:list/>为例
这一章节我们来讨论一下怎样建立集合以及訪问集合的元素? 1.建立集合? (1)domain 蛋糕类: package com.raylee.my_new_spring.my_new_spring.ch ...
- mac鼠标滚动方向自然问题
mac使用鼠标的时候滚轮方向和Windows是相反的.假设不勾选滚动方向自然,那么触摸板使用不爽. 解决的方法: 1.打开http://pilotmoon.com/scrollreverser/,下载 ...
- C# - Thread.Join()
Blocks the calling thread until a thread terminates, while continuing to perform standard COM and Se ...
- 编写SDR SDRAM页突发模式控制器的注意点
网上有很多的SDR SDRAM控制器的代码,但都是基于burst1/2/4/8模式下的,这种模式下传输高速的相机数据还是有点拮据的,所以花了几天把这些模式改造成了页突发模式.我的这个控制器模型是这样的 ...