题意:给你N条线段(垂直于x轴)的两个y坐标还有x坐标,问相互看到的三元组有多少个。
有点纠结就是,如果两个连线之间正好有一条线段的某个端点,这个也是不能计算的,所以这个端点就有意义了,所以就用上面那个题的做法,全部扩大二倍再用线段树。
Sample Input
1       //测试次数
5       //线段数目
0 4 4   //y1,y2,x
0 3 1
3 4 2
0 2 2
0 2 3
Sample Output

1

 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
using namespace std;
#define MOD 1000000007
const int INF=0x3f3f3f3f;
const double eps=1e-;
#define cl(a) memset(a,0,sizeof(a))
#define ts printf("*****\n");
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define root 1,n,1
#define mid ((l+r)>>1)
const int MAXN=;
int n,m,t,Min,tt;
int sum[MAXN<<],col[MAXN<<],hash[MAXN]; vector<int> v[MAXN];
struct node
{
int s,t,x;
void in()
{
scanf("%d%d%d",&s,&t,&x);
s<<=,t<<=;
}
}a[MAXN];
bool cmp(node A,node B)
{
return A.x<B.x;
}
void pushdown(int rt)
{
if(col[rt]!=-)
{
col[rt<<]=col[rt<<|]=col[rt];
col[rt]=-;
}
}
void update(int L,int R,int val,int l,int r,int rt)
{
if(l>=L&&r<=R)
{
col[rt]=val;
return;
}
pushdown(rt);
if(L<=mid) update(L,R,val,lson);
if(R>mid) update(L,R,val,rson);
}
void query(int L,int R,int val,int l,int r,int rt){
if(col[rt]!=-){
if(hash[col[rt]]!=val){ //防止重复覆盖
v[col[rt]].push_back(val);
hash[col[rt]]=val;
}
return ;
}
if(l==r) return ;
pushdown(rt);
if(L<=mid) query(L,R,val,lson);
if(R>mid) query(L,R,val,rson);
}
int main()
{
int i,j,k;
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
scanf("%d",&tt);
while(tt--)
{
memset(col,-,sizeof(col));
memset(hash,-,sizeof(hash));
scanf("%d",&n);
for(i=;i<n;i++)
{
a[i].in();
v[i].clear();
}
sort(a,a+n,cmp);
for(i=;i<n;i++)
{
query(a[i].s,a[i].t,i,,,);
update(a[i].s,a[i].t,i,,,);
}
for(i=;i<n;i++)
{
sort(v[i].begin(), v[i].end()); //v[i]储存的是i号结点所能看到的线段编号
}
int tot=;
for(i=;i<n;i++)
{
int len=v[i].size();
for(j=;j<len;j++)
{
for(k=j+;k<len;k++)
{
int a1=v[i][j];
int a2=v[i][k];
if(binary_search(v[a1].begin(),v[a1].end(),a2)) tot++;
}
}
}
printf("%d\n",tot);
}
}

最新文章

  1. NPM使用前设置和升级
  2. .net读取xml文件中文乱码问题解决
  3. MvcAdmin功能介绍
  4. Careercup - Facebook面试题 - 5188884744896512
  5. JavaScript基础精华01(变量,语法,数据类型)
  6. java随机数生成(固定位数)
  7. Webbrowser判断页面加载完成
  8. iOS 设置状态栏的颜色
  9. GDB命令行最基本操作
  10. Hadoop平台安装前准备
  11. 文本图片自适应高度小bug以及解决办法
  12. redis集群搭建实践
  13. Docker(七):Docker容器卷管理
  14. js 异步转同步
  15. SQL Server 2012-2016-2017 简体中文版下载和序列号
  16. C++ string中find() 用法
  17. 【iCore4 双核心板_ARM】例程六:IWDG看门狗实验——复位ARM
  18. PHP企业微信配置点击事件。
  19. VirtualBox中安装Fedora9及其ARM开发环境配置
  20. 调试工具BTrace 的使用--例子

热门文章

  1. ajax.BeginForm异步提交表单并显示更新数据
  2. vue总结05 过渡--状态过渡
  3. 【小程序开发】上拉加载更多demo
  4. ASP .Net Core系统部署到 CentOS7 64 具体方案
  5. eclipse各种报错
  6. Django配置https协议
  7. 20165203《Java程序设计》第四周学习总结
  8. 如何适配处理iphoneX底部的横条 - ios
  9. 不用的代码,存一份--用tornado实现的websocket
  10. day5模块学习--shutil模块