POJ2528线段树基础
開始就直接用延迟标记搞了下。最后发现内存肯定会爆了。数据太大了。
问了瓜神,原来应该用离散化来做这题,详细见凝视
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <climits>
#include <string>
#include <iostream>
#include <map>
#include <cstdlib>
#include <list>
#include <set>
#include <queue>
#include <stack>
using namespace std;
#define INF 0xfffffff
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define maxn 444444
int col[maxn<<2];
int l[maxn],r[maxn];
int q[maxn],q1[maxn],vis[maxn],hash[maxn];
void pushdown(int rt)
{
if(col[rt])
{
col[rt<<1]=col[rt<<1|1]=col[rt];
col[rt]=0;
}
}
void build(int l,int r,int rt)
{
col[rt]=0;
if(l==r) return ;
int m=(l+r)>>1;
build(lson);
build(rson);
}
void update(int L,int R,int cha,int l,int r,int rt)
{
if(L<=l&&R>=r)
{
col[rt]=cha;
return ;
}
pushdown(rt);
int m=(l+r)>>1;
if(L<=m) update(L,R,cha,lson);
if(R>m) update(L,R,cha,rson);
}
void query(int l,int r,int rt)
{
if(col[rt])//假设某张海报存在。将这张海报标记一下
{
hash[col[rt]]=1;
return ;
}
int m=(l+r)>>1;
query(lson);
query(rson);
}
int bsearch(int key,int *a,int len)//二分查找
{
int l=0,r=len-1;
while(l<=len)
{
int m=(l+r)>>1;
if(a[m]==key) return m+1;
else if(a[m]>key) r=m-1;
else l=m+1;
}
}
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
memset(vis,0,sizeof(vis));
memset(hash,0,sizeof(hash));
scanf("%d",&n);
int ans=0,ans1=0;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&l[i],&r[i]);
q[ans++]=l[i];q[ans++]=r[i];
}
sort(q,q+ans);
for(int i=0;i<ans-1;i++)
{
if(q[i]==q[i+1]) vis[i+1]=1;
}
for(int i=0;i<ans;i++)//将原来浪费的空间又一次利用,减少树的大小
{
if(!vis[i]) q1[ans1++]=q[i];
}
for(int i=1;i<=n;i++)//找到如今树中各点的位置
{
l[i]=bsearch(l[i],q1,ans1);
r[i]=bsearch(r[i],q1,ans1);
}
build(1,ans1,1);//建树
for(int i=1;i<=n;i++)
{
update(l[i],r[i],i,1,ans1,1);
}
query(1,ans1,1);
int tot=0;
for(int i=1;i<=n;i++)//统计海报的张数
{
if(hash[i]) tot++;
}
printf("%d\n",tot);
}
return 0;
}
POJ2528线段树基础的更多相关文章
- Poj 3246 Balanced Lineup(线段树基础)
依旧是线段树基础题 询问区间的最大值和最小值之差,只有询问,没有插入删除.继续理解基础线段树 #include <iostream> #include <algorithm> ...
- poj-2528线段树练习
title: poj-2528线段树练习 date: 2018-10-13 13:45:09 tags: acm 刷题 categories: ACM-线段树 概述 这道题坑了我好久啊啊啊啊,,,, ...
- P1198 [JSOI2008]最大数(线段树基础)
P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: ...
- HDU 1754 I Hate It(线段树基础应用)
基础线段树 #include<iostream> #include<cstdio> #include<cstring> using namespace std; # ...
- 线段树基础模板&&扫描线
线段树的单点更新+区间求和 hdu1166敌兵布阵 Input 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N<=),表示敌人有N个工兵营地 ,接下来有N个正整数,第i个正整 ...
- poj2528(线段树+离散化)Mayor's posters
2016-08-15 题意:一面墙,往上面贴海报,后面贴的可以覆盖前面贴的.问最后能看见几种海报. 思路:可以理解成往墙上涂颜色,最后能看见几种颜色(下面就是以涂色来讲的).这面墙长度为1~1000 ...
- POJ2528+线段树
见代码. /* 线段树+Lazy 题意:有一面墙,被等分为1QW份,一份的宽度为一个单位宽度. 现在往墙上贴N张海报,每张海报的宽度是任意的,但是必定是单位宽度的整数倍,且<=1QW. 后贴的海 ...
- POJ2528 线段树的区间操作
首先应该对该[0,10000000]进行离散化 即先将点集进行排序,然后从小到大缩小其中的间距,使得最后点数不会超过2*n 然后就是线段树操作 只需进行染色,然后最后用nlgn进行一个个查询颜色记录即 ...
- POJ 2777 线段树基础题
题意: 给你一个长度为N的线段数,一开始每个树的颜色都是1,然后有2个操作. 第一个操作,将区间[a , b ]的颜色换成c. 第二个操作,输出区间[a , b ]不同颜色的总数. 直接线段树搞之.不 ...
随机推荐
- poj 1018 Communication System_贪心
题意:给你n个厂,每个厂有m个产品,产品有B(带宽),P(价格),现在要你求最大的 B/P 明显是枚举,当P大于一定值,B/P为零,可以用这个剪枝 #include <iostream> ...
- OpenStack ceilometer部署安装监控,计费数据抓取测试Ok
- Windows Server 2012 R2超级虚拟化之七 远程桌面服务的增强
Windows Server 2012 R2超级虚拟化之七 远程桌面服务的增强 在Windows Server 2012提供的远程桌面服务角色,使用户能够连接到虚拟桌面. RemoteApp程序.基 ...
- [置顶] 获取系统时间的方法--linux
一. localtime 函数获取(年/月/日/时/分/秒)数值. 1.感性认识 #include<time.h> //C语言的头文件 #include<stdio.h> ...
- gcc选项-g与-rdynamic的异同
摘自http://www.tuicool.com/articles/EvIzUn gcc选项-g与-rdynamic的异同 gcc 的 -g ,应该没有人不知道它是一个调试选项,因此在一般需要进行程序 ...
- git 之别名配置
在git操作中有很多命令我们自己可以起别名,以提高操作效率. 1. 配置方式 1)项目级别的配置,仅对当前项目生效(将写入到.git/config文件中) $ git config --glob ...
- poj 2411 Mondriaan's Dream 【dp】
题目:id=2411" target="_blank">poj 2411 Mondriaan's Dream 题意:给出一个n*m的矩阵,让你用1*2的矩阵铺满,然 ...
- 在SSH框架中增加SiteMesh的支持
1)引入jar包,如下两个jar包需要导入到系统的lib文件夹中: sitemesh-2.4.jar struts2-sitemesh-plugin-2.2.1.1.jar 2)修改web.xml增加 ...
- twitter 监控登陆活动
http://vicenteaguileradiaz.com/download/tinfoleak/tinfoleak-1.2.tar.gz
- gateone安装(web版本ssh)
前言: 好久都没来写博客,最近忙啥去了呢? 一是忙于saltstack的二次开发,二是云计算的学习研究中,所以就一直没写东西,今天给大家介绍个工具. 好了,开始正文! 1.首先来说一下为什么要web ...