能用线段树做,但是n3也过

把坐标 * 2 来区别,端点和非端点

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct edge
{int y1,y2,x,id;
}E[8008];
int node[8008*8];
bool ok[8008][8008];
inline bool cmp(edge a,edge b)
{return a.x<b.x;
}
void push_down(int root)
{if (node[root] == 0) return;node[root*2] = node[root];node[root*2+1] = node[root];node[root] = 0;
}
void solve(int root,int xbegin,int xend,int qbegin,int qend,int id)
{if (qend < xbegin||xend<qbegin) return;if (qbegin <= xbegin && xend <= qend){if (node[root]!=0){ok[id][node[root]] = true;ok[node[root]][id] = true;node[root] = id;return;}node[root] = id;}elsepush_down(root);int mid = (xbegin + xend) /2;if (xbegin == xend) return;solve(root*2,xbegin,mid,qbegin,qend,id);solve(root*2+1,mid+1,xend,qbegin,qend,id);}
int main()
{int T;cin >> T;int y1,y2,x;while (T--){int N;cin >> N;memset(node,0,sizeof(node));memset(ok,false,sizeof(ok));int max_y = 0;for (int i = 1; i<=N; i++){scanf("%d%d%d",&y1,&y2,&x);E[i].y1 = y1;E[i].y2 = y2;E[i].x = x;E[i].id = i;max_y = max(max_y,y2);}sort(E+1,E+N+1,cmp);int ans = 0;for (int i = 1;i<=N;i++){solve(1,0,2 * max_y,E[i].y1 * 2,E[i].y2 * 2,E[i].id);}for (int i = 1; i<=N; i++)for (int j = i+1; j<=N; j++)if (ok[i][j])for (int k = j+1;k<=N; k++){if (ok[i][j]&&ok[i][k]&&ok[j][k]) ans++;}cout <<ans<<endl;}
}

POJ-1436Horizontally 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. 【POJ - 3304 】Segments(计算几何,思想转化,直线和线段相交)

    题干: Given n segments in the two dimensional space, write a program, which determines if there exists ...

  4. poj 3090 Visible Lattice Points(离线打表)

    这是好久之前做过的题,算是在考察欧拉函数的定义吧. 先把欧拉函数讲好:其实欧拉函数还是有很多解读的.emmm,最基础同时最重要的算是,¢(n)表示范围(1, n-1)中与n互质的数的个数 好了,我把规 ...

  5. POJ 3090 Visible Lattice Points 【欧拉函数】

    <题目链接> 题目大意: 给出范围为(0, 0)到(n, n)的整点,你站在(0,0)处,问能够看见几个点. 解题分析: 很明显,因为 N (1 ≤ N ≤ 1000) ,所以无论 N 为 ...

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

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

  7. POJ 超详细分类

    POJ 各题算法 1000    A+B Problem            送分题     49%    2005-5-7 1001    Exponentiation         高精度   ...

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

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

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

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

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

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

最新文章

  1. Android 中 include的使用
  2. 英文VS2010安装中文版MSDN文档方法
  3. USACO 2.3 货币系统(背包/生成函数)
  4. Linux——挖矿病毒(sysupdate, networkservice进程)清除解决方案
  5. VTK:图片之ImageHistogram
  6. 给git配置http代理
  7. 在OpenShift上扩展Java EE微服务
  8. 《3ds Max疯狂设计学院》——1.6节3ds Max 2016新增的主要功能
  9. 揭秘人工智能(系列):人工智能带来的网络安全威胁
  10. matlab repmat函数_Matlab向量化编程在二级劝退学科中的一个应用例子
  11. Javascript第六章JavaScript中构造器创建对象第二课
  12. 二维字符数组转字符串c语言,[求助] 怎样转换一个字符二维数组到一维数组~~~...
  13. 蓝桥杯单片机温度传感器DS18B20(基于STC15F2K60S2)
  14. TCP segment of a reassembled PDU
  15. 在NS2(2.35版本)中添加 Ping协议
  16. QQ第三方登录的应用
  17. C++ 2.吃雪糕吗
  18. 疫情数据分析平台(五):中国疫情地图绘制
  19. 一流管理者,都不会选“先做再说”
  20. 供应链金融区块链应用

热门文章

  1. 杀戮空间2服务器修改地图,《杀戮空间2》新地图全任务完成方法图文详解
  2. Smartbi的安装部署
  3. 视频大数据与物联网(IoT)融合发展的探索
  4. 我与U盘病毒抗争的那几年——一个特别的进程U盘病毒
  5. Linux系统管理命令(1)accton的使用
  6. doc文件转换为docx文件
  7. CM,AOKP系统没有Logcat 解决办法
  8. 一寸照片快照多少钱_去照相馆拍照一般多少钱
  9. 树形DP·1771仓库选址
  10. TexLive2018中使用BibTeX管理参考文献