/*暴力30分*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
#define maxn 100010
using namespace std;
int n,l=0x7fffffff,r=-0x7fffffff;
int s,ans1[maxn*],ans2[maxn*],h[maxn];
struct node
{
int li,ri,hi;
}p[maxn];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d%d%d",&p[i].hi,&p[i].li,&p[i].ri);
l=min(l,p[i].li);r=max(r,p[i].ri);
}
for(int i=;i<=n;i++)
for(int j=p[i].li;j<p[i].ri;j++)
h[j]=max(h[j],p[i].hi);
int pre=;
for(int i=l;i<=r;i++)
{
if(h[i]!=pre)
{
ans1[++s]=i;
ans2[s]=pre;
ans1[++s]=i;
ans2[s]=h[i];
pre=h[i];
}
}
printf("%d\n",s);
for(int i=;i<=s;i++)
printf("%d %d\n",ans1[i],ans2[i]);
return ;
}
/*神奇的set+sort*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<set>
#define maxn 200010
using namespace std;
multiset<int,greater<int> >s;
int n,tot,t,ans1[maxn*],ans2[maxn*];
struct node
{
int x,k,b,h;
}q[maxn];
int cmp(const node &q1,const node &q2)//关键的cmp
{
if(q1.x!=q2.x)return q1.x<q2.x;
if(q1.k!=q2.k)return q1.k<q2.k;//挨在一起的 先考虑左 后考虑右 就不会把这里的4个点输出
if(q1.k==)return q1.h>q2.h;//左边 先考虑高的 把低的覆盖了
if(q1.k==)return q1.h<q2.h;//同理
}
int main()
{
scanf("%d",&n);
int l,r,hi;
for(int i=;i<=n;i++)
{
scanf("%d%d%d",&hi,&l,&r);
q[++tot].x=l;q[tot].b=i;q[tot].k=;q[tot].h=hi;
q[++tot].x=r;q[tot].b=i;q[tot].k=;q[tot].h=hi;
}
sort(q+,q++tot,cmp);
for(int i=;i<=tot;i++)
{
if(q[i].k==)
{
if(*s.begin()>=q[i].h)s.insert(q[i].h);
else
{
t+=;
ans1[t]=q[i].x;ans2[t]=*s.begin();
t+=;
ans1[t]=q[i].x;ans2[t]=q[i].h;
s.insert(q[i].h);
}
}
if(q[i].k==)
{
if(*s.begin()==q[i].h&&s.count(q[i].h)==)
{
s.erase(s.find(q[i].h));
t+=;
ans1[t]=q[i].x;ans2[t]=q[i].h;
t+=;
ans1[t]=q[i].x;ans2[t]=*s.begin();
}
else s.erase(s.find(q[i].h));
}
}
printf("%d\n",t);
for(int i=;i<=t;i++)
printf("%d %d\n",ans1[i],ans2[i]);
return ;
}
/*
离散化然后线段树维护每个点的hmax
然后按照打爆力的方法找
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100010
using namespace std;
int n,m,num,tot,a[maxn*],b[maxn*];
int ans1[maxn*],ans2[maxn*],cnt;
struct node
{
int l,r,h;
}p[maxn];
struct tree
{
int l,r,lc,rc,ans,lazy;
}t[maxn*];
int cmp(const node &x,const node &y)
{
return x.h<y.h;
}
void Build(int li,int ri)
{
int k=++tot;
t[k].l=li;t[k].r=ri;
if(li!=ri-)
{
t[k].lc=tot+;Build(li,(li+ri)/);
t[k].rc=tot+;Build((li+ri)/,ri);
t[k].ans=max(t[t[k].lc].ans,t[t[k].rc].ans);
}
else t[k].ans=;
}
void updata(int k)
{
t[t[k].lc].ans=max(t[t[k].lc].ans,t[k].lazy);
t[t[k].rc].ans=max(t[t[k].rc].ans,t[k].lazy);
t[t[k].lc].lazy=max(t[t[k].lc].lazy,t[k].lazy);
t[t[k].rc].lazy=max(t[t[k].rc].lazy,t[k].lazy);
t[k].lazy=;
}
void Change(int k,int li,int ri,int data)
{
if(li<=t[k].l&&ri>=t[k].r)
{
t[k].ans=max(data,t[k].ans);
t[k].lazy=max(t[k].lazy,data);
return;
}
if(t[k].lazy)updata(k);
int mid=(t[k].l+t[k].r)/;
if(li<mid)Change(t[k].lc,li,ri,data);
if(ri>mid)Change(t[k].rc,li,ri,data);
t[k].ans=max(t[t[k].lc].ans,t[t[k].rc].ans);
}
int Query(int k,int p)
{
if(t[k].l==t[k].r-)return t[k].ans;
if(t[k].lazy)updata(k);
int mid=(t[k].l+t[k].r)/;
if(p<mid)return Query(t[k].lc,p);
else return Query(t[k].rc,p);
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d%d%d",&p[i].h,&p[i].l,&p[i].r);
a[++m]=p[i].l;a[++m]=p[i].r;
}
sort(a+,a+m+);sort(p+,p++n,cmp);
b[++num]=a[];
for(int i=;i<=m;i++)
if(a[i]!=a[i-])b[++num]=a[i];
Build(,m+);
for(int i=;i<=n;i++)
{
int p1=lower_bound(b+,b++num,p[i].l)-b;
int p2=lower_bound(b+,b++num,p[i].r)-b;
Change(,p1,p2,p[i].h);
}
for(int i=;i<=num;i++)
{
ans1[i]=b[i];ans2[i]=Query(,i);
if(ans2[i]!=ans2[i-])cnt++;
}
printf("%d\n",cnt*);
for(int i=;i<=num;i++)
if(ans2[i]!=ans2[i-])
{
printf("%d %d\n",ans1[i],ans2[i-]);
printf("%d %d\n",ans1[i],ans2[i]);
}
return ;
}

codevs 2995 楼房的更多相关文章

  1. 扫描线+堆 codevs 2995 楼房

    2995 楼房  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 地平线(x轴)上有n个矩(lou)形(fan ...

  2. AC日记——楼房 codevs 2995

    2995 楼房  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 地平线(x轴)上有n个矩(lou ...

  3. Codevs堆练习

    Codevs堆练习 黄金:2830.2879.2995.3110 钻石:1052.1063.1245.1246.2057.2573.3377 大师:1021.1765.2069.2913.3032

  4. codevs 1002 搭桥

    codevs 第一道题 先贴描述 1002 搭桥  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description ...

  5. codevs 3289 花匠

    题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...

  6. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  7. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  8. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  9. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

随机推荐

  1. When Colon Scripting is comming (脚本最佳体验)

    当冒号脚本来临-- 脚本最佳体验 冒号指派 说明; 冒号替代等号指派赋值,当命名声明指派时指定.相当于声明当前作用域的一个名字指派. 当对指定对象的属性赋值时候,依旧请使用等号.即不废弃等号赋值功用, ...

  2. underscorejs-sortBy学习

    2.17 sortBy 2.17.1 语法 _.sortBy(list, iteratee, [context]) 2.17.2 说明 返回一个排序后的list拷贝副本. list为集合,如数组.对象 ...

  3. jQuery delegate方法实现Ajax请求绑定事件不丢失

    给元素绑定click事件后 ,遇到一个问题:当执行一些ajax请求,再次调用此页面,里面的这个click事件就失效了 比如说:我的分页是一个ajax请求 但我点下一页时 后生成的元素a就没有了clic ...

  4. js 点名

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  5. linux c信息验证程序(分享)

    程序来源是Hirst First c,程序很简单,但却是很好的说明了一个检测信息是否被串改的原理.下载程序的时候是否都有看到提供md5效验值的呢,原理其实和这个小程序相似:就是对程序的内容进行某种计算 ...

  6. bzoj1115: [POI2009]石子游戏Kam

    Description 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏 ...

  7. SQL Server T-SQL高级查询1

    高级查询在数据库中用得是最频繁的,也是应用最广泛的. Ø 基本常用查询 --select select * from student;   --all 查询所有 select all sex from ...

  8. fpdf使用標楷體

    <? require('chinese-unicode.php'); $pdf=new PDF_Unicode(); $pdf->Open(); $pdf->AddPage(); $ ...

  9. POJ Stockbroker Grapevine 1125 多源最短路(Floyd)

    题目大意: 股票经纪人要散播股票的谣言,每个人都有人际关系,每个人只信任他相信的人传播的谣言, 其实也就是有向图.问 哪个人能最快的将谣言传播给所有人,并且求出传过去的最短时间. 题目分析: 我们用F ...

  10. 浅谈SQL Server中的快照

    原文地址:http://www.cnblogs.com/CareySon/archive/2012/03/30/2424880.html 简介 数据库快照,正如其名称所示那样,是数据库在某一时间点的视 ...