题目:Horizontally Visible Segments

总结:题目中的两两相见的意思是,一根水平线可以将两个线段相连,并且两个线段之间不会有其他的线段。给每个线段都标上一个序号,用vis数组来表示两个线段是否两两相见。对x按升序排序,查看它的左边有多少个可以两两相连,再将这条线段加上去,依次这样。。。

#include <stdio.h>
#include <string.h>
#include <algorithm>
#define mid (start+end)/2
#define ls (2*rt)
#define rs ((2*rt)+1)
const int N = 8e3+5;
using namespace std;int tree[N*2<<2];
bool vis[5+N][5+N];
struct str{int y1,y2;int x;int id;
}a[N];bool cmp(struct str a,struct str b){return a.x < b.x;
}
void query(int l,int r,int id,int rt,int start,int end){if(tree[rt]){vis[id][tree[rt]] = true;return;}if(start == end) return;if(l <= mid) query(l,r,id,ls,start,mid);if(r > mid) query(l,r,id,rs,mid+1,end);
}
void update(int l,int r,int v,int rt,int start,int end){if(start >= l && end <= r){tree[rt] = v;return;}if(tree[rt]){tree[ls] = tree[rs] = tree[rt];tree[rt] = 0;}if(l <= mid) update(l,r,v,ls,start,mid);if(r > mid) update(l,r,v,rs,mid+1,end);
}
void trave(){for(int i = 1;i <= 5;i++){for(int j = 1;j <= 5;j++){printf("%3d",vis[i][j]);}printf("\n");}printf("\n");
}
int main(){int d,n;scanf("%d",&d);while(d--){scanf("%d",&n);for(int i = 0;i < n;i++){scanf("%d %d %d",&a[i].y1,&a[i].y2,&a[i].x);a[i].id = i+1;}sort(a,a+n,cmp);memset(tree,0,sizeof tree);memset(vis,false,sizeof vis);int ans = 0;for(int i = 0;i < n;i++){query(a[i].y1*2,a[i].y2*2,a[i].id,1,0,N*2);update(a[i].y1*2,a[i].y2*2,a[i].id,1,0,N*2);//        trave();}for(int i = 1;i <= n;i++){for(int j = 1;j <= n;j++){if(vis[i][j]){for(int k = 1;k <= n;k++){if(vis[i][k]&&vis[j][k]){ans++;}}}}}printf("%d\n",ans);}return 0;
}

Horizontally Visible Segments相关推荐

  1. poj 1436 zoj 1391 Horizontally Visible Segments (Segment Tree)

    ZOJ :: Problems :: Show Problem 1436 -- Horizontally Visible Segments 用线段树记录表面能被看见的线段的编号,然后覆盖的时候同时把能 ...

  2. poj 1436 Horizontally Visible Segments

    题目大意: 在一个平面内,有一些竖直的线段,若两条竖直线段之间可以连一条水平线,这条水平线不与其他竖直线段相交,称这两条竖直线段为"相互可见"的.若存在三条竖直线段,两两" ...

  3. 数据结构---线段树

    线段树 转载请注明出处,谢谢!http://blog.csdn.net/metalseed/article/details/8039326  持续更新中···   一:线段树基本概念 1:概述 线段树 ...

  4. 【转】线段树题目 汇总 讲解(by not only success)

    转载自:http://www.notonlysuccess.com/ 非常喜欢他的代码风格以及简洁的思路,感谢notonlysuccess! PS:他的个人网站好像是上不去了-.- 线段树 很早前写的 ...

  5. ACM大牛总结的线段树专辑

    https://blog.csdn.net/qq_25605637/article/details/46967529 [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章 ...

  6. 【转载】完全版线段树 by notonlysuccess大牛

    原文出处:http://www.notonlysuccess.com/ 今晚上比赛就考到了 排兵布阵啊,难受. [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时 ...

  7. 狗狗40题~ (Volume C)

    A - Triangles 记忆化搜索呗.搜索以某三角形为顶的最大面积,注意边界情况. 1 #include <stdio.h> 2 #include <cstring> 3 ...

  8. 转载自杭电大牛的博客 线段树 绝对经典

    转载自:http://www.notonlysuccess.com/ 不可不看的经典 学线段树必看,大牛很多,给后人留下记录的却没有几个,谢谢这位大牛~! 因为我这最近他博客打不开了...特意从别人那 ...

  9. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  10. 线段树模板(来自胡浩大牛)

    http://www.notonlysuccess.com/(今天看二叉树,想回来看看,发现大牛博客进不去...) 如果要学,就要好好学.我copy的,如有错,请看http://www.cnblogs ...

最新文章

  1. Sql Server 2008 无法启动T-Sql调试问题的解决方案
  2. 【VLC-Android】vlc-android简例
  3. JavaScript内置对象Date----格式化时间
  4. 古代的碎银子是怎么来的?
  5. 一个老程序员的心里话---想创业的技术人员可以看
  6. jdk,jre,tommcat配置问题
  7. Spring Cloud Alibaba系列教程-03-搭建生产可用的Nacos集群
  8. 阿里天池大赛实战记录之菜鸟-需求预测与分仓规划
  9. 学校计算机编程用的什么软件,电脑编程软件都有哪些
  10. 黑客帝国之八种超级武器
  11. 统计学中p值计算公式_统计学中P值的计算!
  12. A股主要指数的市盈率(PE)估值高度
  13. VS2005向前向后定位图标
  14. Kali Linux中安装IDLE的方法
  15. DMM数据管理能力成熟度模型简介
  16. 世界卫生组织关于糖尿病、眼部疾病的相关数据整理
  17. 【302期】SpringBoot 项目鉴权的 4 种方式,你了解吗?
  18. Linux:查看服务器信息,CPU、内存、系统版本、内核版本等
  19. 【UE4教程】Unreal 4.22 UI显示指定物体-实时渲染
  20. 学习笔记STM32F429使用编码器测速HAL库版本

热门文章

  1. 实现注册功能添加邮箱激活验证
  2. Java知识复习清单
  3. 数显之家快讯:【SHIO世硕心语】2021年中国10大最赚钱的机会!
  4. 【Unity面试】 2022年Unity面试题分享 | 全面总结 | 建议收藏
  5. 英语3500词(七)dating主题(2022.1.19)
  6. 阅读不懂,图书之过——《大话设计模式》创作历程
  7. 转换优化 onnx模型
  8. OpenGl 之学习笔记 glNormal3f 函数理解和光源相关知识总结
  9. 多线程1-Thread
  10. 利用Python+xarray+cartopy+matplotlib 实现遥感地形图制图绘制 —— xarray 学习文档01