POJ-1436 orizontally Visible Segments 线段树

实战优化!C#上位机串口通信卡顿问题:超时机制+数据缓存方案 串口名</param>/// <param name="baudRate">波特率 阅读详情

        题目链接:http://poj.org/problem?id=1436

        题意:有若干线段垂直于x轴,如果其中任意两条线段能用一平行于x轴的线段与之相交,并且与其它线段没有交点,我们就说这两条线段水平可见。如果有三条线段,其中任意的两条满足水平可见性,那么他们就能组成一个三角形。求在给定的线段中,有多少个这样的三角形。

       首先要求那些线段满足水平可见性,显然是一个线段树覆盖的为题,当前要更新的与已被覆盖的线段满足水平可见性。用vector建一个邻接表,保存当前线段与之满足水平可见性的线段编号,然后就是找环,爆搜之。

       My code:

//STATUS:C++_AC_157MS_1084KB 
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<vector>
#include<queue>
#include<math.h>
#include<map>
#include<set>
using namespace std;
#define LL __int64
#define pii pair<int,int>
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int MAX=8010,INF=200000000;
const double esp=1e-6;
struct Node{
	int y1,y2,x;
}line[MAX];
int cmp(const void *a,const void *b){
	return ((Node*)a)->x - ((Node*)b)->x;
}
int ret[MAX<<3];
void update(int l,int r,int rt);
void pushdown(int rt);
void pushup(int rt);
int work();
int T,n,a,b,c;
vector<int> hash[MAX];
int main()
{
//	freopen("in.txt","r",stdin);
	int i,j;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		for(i=1;i<=n;i++)
			hash[i].clear();
		for(i=0;i<n;i++)
			scanf("%d%d%d",&line[i].y1,&line[i].y2,&line[i].x);
		qsort(line,n,sizeof(Node),cmp);
		memset(ret,0,sizeof(ret));
		for(i=0;i<n;i++){
			c=i+1;
			a=line[i].y1<<1,b=line[i].y2<<1;
			update(0,16000,1);
		}

		printf("%d\n",work());
	}
	return 0;
}

void pushdown(int rt)
{
	if(ret[rt]>0){
		ret[rt<<1]=ret[rt<<1|1]=ret[rt];
		ret[rt]=-1;
	}
}

void pushup(int rt)
{
	if(ret[rt<<1]!=ret[rt<<1|1])
		ret[rt]=-1;
	if(ret[rt<<1]==ret[rt<<1|1])
		ret[rt]=ret[rt<<1];
}

void update(int l,int r,int rt)
{
	if(a<=l && r<=b && ret[rt]!=-1){
		if(ret[rt] && (hash[ret[rt]].size()==0 || 
			(hash[ret[rt]].size() && hash[ret[rt]][ hash[ret[rt]].size()-1 ]!=c) ))
			hash[ret[rt]].push_back(c);
		ret[rt]=c;
		return;
	}
	pushdown(rt);
	int mid=(l+r)>>1;
	if(a<=mid)update(lson);
	if(b>mid)update(rson);
	pushup(rt);
}

int work()
{
	int i,j,k,ans=0,t,p,ok;
	for(k=1;k<=n;k++){
		for(i=0;i<hash[k].size();i++){
			for(j=i+1;j<hash[k].size();j++){
				t=hash[k][i];
				for(p=ok=0;p<hash[t].size();p++)
					if(hash[t][p]==hash[k][j]){
						ok=1;
						break;
					}
				ans+=ok;
			}
		}
	}
	return ans;
}

Apache Flink连载(一):Apache Flink是什么? Apache Flink 是一个框架和分布式处理引擎,用于在。 阅读详情

相关推荐

TCGA之GDC-client工具下载安装与使用

文章主要是对GDC-client工具下载TCGA数据库数据整个过程的一个记录 1.下载GDC-client工具 GDC-client工具网址:GDC Data Transfer Tool | NCI Genomic Data Commons (cancer.gov) 我这里下的是上图中红圈中的版本, 2.解压安装 从网上了解的是不能解压到带中文的路径里,解压后是一个.exe文件,为了能直接在cmd命令行下使用,将其加入系统环境: 点击新建之后,输入将文件解压到的路径,然后...

better_strong的博客 1万+

poj1436(线段树成段更新)

题目链接: /*poj1436成段更新(难点:端点的处理) 题意: n条竖直线段,每行输入y1,y2,x,分别表示线段下端点,上端点,横坐标 定义两天线段可见:如果一条水平线段连接它们,且在它们之间不经过其它线段。 最后求有多少组3条线段是两两可见的。 思路:首先将所有线段按x坐标的大小进行排序,然后对y轴建树 对每一条线段执行查询操作,查询当前线段区间内可见线段有哪些,并记录,然后更

no pains,no gains 906

AIGC大模型应用教学平台

该平台采用最新的AI推理加速芯片,提供30Tops算力和32GB存储,能够运行常见的大语言模型如ChatGLM2、Llama2、Baicuan、Mistral等,也可以运行文生图扩散模型Stable Diffusion,提供大模型微调、量化、转换和加速推理服务。在此基础上,平台还提供常见的生成式AI应用,包括AIGC知识抽取增强(RAG)、AIGC绘画、AIGC会话聊天、数字虚拟人等应用,以便学生能够掌握最新的生成式AI模型微调、提示工程和智能体应用技能。

中智讯的博客 1207

POJ 1436 Horizontally Visible Segments 简单hash+区间更新

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】]( )**

2401_83621384的博客 851

Qwen2.5-VL模型微调实战:从零到部署的完整流程(附避坑指南)

本文详细介绍了Qwen2.5-VL视觉语言模型从零开始的完整微调与部署流程。内容涵盖使用LLaMA-Factory进行LoRA微调的关键参数配置与避坑指南,以及如何将训练好的模型权重合并,并最终利用vLLM高性能推理引擎进行部署,为开发者提供了一套可落地的实战方案。

oo7890的博客 592

Conda虚拟环境用conda和pip安装软件包的路径问题

解决在虚拟环境中用pip默认把软件包安装到全局site-packages中。

stone9528的博客 4万+

POJ 1436 Horizontally Visible Segments

POJ 1436 题目链接:POJ 1436 题意: n条横坐标为x的竖线,竖线纵坐标从y1到y2. 有多少个三元组能两两互相看到对方的。 分析: 先进行覆盖填充,然后暴力求解。 #include #include #include #include #include using namespace std; #define lson l, mid,

小酷Miki的专栏 254

R语言线性混合模型(LMM)分析

它将数据表示为固定效应和随机效应的线性组合,其中固定效应表示总体均值的影响,随机效应表示个体间的随机差异。LMM的目标是通过最大似然估计或最小二乘估计来估计模型中的固定效应和随机效应的参数。LMM结合了固定效应和随机效应,能够同时考虑个体间和个体内的变异,并适用于具有相关性的数据。目前在使用LMM的R语言包中,较常用的是lme4和nlme包,它们提供了丰富的函数和工具来拟合和分析线性混合模型。面板数据分析:LMM适用于分析具有面板结构的数据,如经济学中的面板数据或教育研究中的学生评估数据。

走向CTO的路上... 2969

POJ 1436 Horizontally Visible Segments

题意: 给你8000条平行Y轴

u012659423的专栏 641

基于YOLOv8改进的目标检测算法研究及毕设实现全流程指南

在PyTorch中定义改进后的YOLOv8模型。首先,导入相关的库和模块,然后定义骨干网络、颈部和头部的结构。# 这里定义骨干网络的结构,例如使用改进的CSP结构# 卷积层、批归一化层、激活函数等# 更多的卷积层、批归一化层、激活函数等# 其他层...# 其他层的输出...然后,定义颈部和头部的结构,类似地,将注意力机制和特征增强方法集成到模型中。本毕设以YOLOv8为基础,通过集成注意力机制、应用特征增强技术等方法,改进了目标检测算法。

m0_64661770的博客 323

ABAP CDS View 从入门到精通教程目录:ABAP CDS View 在 SAP 技术体系中的重要地位

学习 ABAP CDS View 的开发技术,体会其背后的设计理念,也就掌握了 SAP S/4HANA 底层数据模型的设计精髓。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4777

POJ-1436 线段树 区间更新

题中定义了什么叫做可见线段。所谓可见线段就是在给定的垂直与x轴的直线中,能够在两个直线之间连接一条平行线,并且这条平行线不与任何其他的直线相交。 WA一次,就是因为没有考虑到在建立点树的过程中会出现将 [1, 2] 和 [3, 4] 视为一条连接的直线,所以最后给坐标乘以一个2. 代码如下: #include &lt;cstdio&gt;#include &lt;cstring&gt;#...

weixin_34208283的博客 157

【定位模块项目实战】gnss_localizer、lidar_localizer功能包解析

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、1.2.3.4.二、1.2.3.4.三、1.2.3.4.四、1.2.3.4.总结参考资料 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对**【无人驾驶autoware项目实战】感知–定位模块**做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、 1. 2. 3. 4. . . 二、

qq_35635374的博客 1931

poj-1436

// 2240K 1297MS C++ #include #include #include #include #include using namespace std; const int MAX = 8010 * 2; set lineVisibleInfo[8000]; struct TreeNode { int left; int right; int lineId

fyfcauc的专栏 551

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

poj1436之线段树成段更新

Language: Default Horizontally Visible Segments Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 2925   Accepted: 1105 Description There is a number of di

Stephen 3344

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

POJ-1436 Horizontally Visible Segments

Horizontally Visible Segments Time Limit: 5000MS   Memory Limit: 65536K Description There is a number of disjoint vertical line segments in the plane. We say that two segments are

JSure的代码库 911

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

poj1436(线段树区间染色)

Horizontally Visible SegmentsThere is a number of disjoint vertical line segments in the plane. We say that two segments are horizontally visible if they can be connected by a horizontal line segment t

siyu 523

POJ - 1436 Horizontally Visible Segments

Description There is a number of disjoint vertical line segments in the plane. We say that two segments are horizontally visible if they can be connected by a horizontal line segment that does not

那些年 1215

poj 1436

给出 n 条垂线,问有多少个三元组 中,任意两条可以看得到对方 样例中 答案为 1 ,横坐标 为 1 的线段+横坐标 为 2 (3,4)的线段+横坐标为 1 的线段  做过 poj 2777 区间染色的问题 就 很容易看出这个 题目 其实就 是 该问题 的小 延伸,我们可以根据x坐标进行从小到大的排序,然后对每条线段query该线段左端,改线段统领的 区间内 有多少种color,vis[][

qingniaofy的专栏 2217

POJ-2528 Mayor's posters 线段树

题目链接:http://poj.org/problem?id=2528         题意:就是在一面墙上贴海报,问最后能看见多上张海报。         这个区间染色,不用多说了。。。         My code(代码还是以前的老风格= =): //STATUS:C++_AC_313MS_20728KB #include #include const int MAX1=10000

岁月流风、、 1320

POJ-3486 A Simple Problem with Integers 线段树

题目链接:http://poj.org/problem?id=3468         题意:给你一数列,进行两种操作。C a b c:对[a,b]的每个数加上数值c;Q a b:询问[a,b]区间的和。         这里需要用到延迟标记操作(懒惰操作),线段树每个区间保存这个区间的未完全更新和sum以及加上去的数值c。向下更新时,如果当前区间c > 0,则向下传递c值,即延迟更新。

岁月流风、、 1173

HUD-3308 LCIS 线段树

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308         题意:给一数列,然后两种操作,更新其中的某个值和询问某个区间的最长连续升序列。         线段树保存3个值,当前区间[a,b]从a开始的最长连续升序列,最长连续升序列和以b结束的最长连续升序列。线段树询问的时候要处理好,我的是从区间做端点开始,然后依次扫描过去比较,如果

岁月流风、、 1038

HUD-4419 Colourful Rectangle 线段树+扫描线+离散

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4419         题意:分别用R,G,B三种颜色覆盖一平面区域,不同的颜色重合会产生不同的颜色:RG,RB,BG,RGB,求最后每种颜色的面积。         矩形面积并,扫描线的加强版。线段树记录分别7重颜色的的长度,然后记录每种颜色覆盖的次数。   My code://STATUS:C++

岁月流风、、 1012

POJ-3225 Help with Intervals 线段树

题目链接:http://poj.org/problem?id=3225         题意:给你一些区间和操作,问你最后有哪些区间。         很容易把操作化简,0,1表示是否包含区间,-1表示该区间内既有包含又有不包含:                                U:把区间[l,r]覆盖成1                                I:把

岁月流风、、 973

HDU-1754 I Hate It 线段树|树状数组

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754        线段树,简单的单点更新处理,树状数组搞搞更方便。我觉得开始学习线段树,主要是学学其线段树的表现方式,一般的想我的代码中的那种处理方式就很方便了,刚开始学的时候,我是在每个区间里面记录每个区间的left和right,后来发现是多余的,因为递归的时候传递下去的l和r可以代替,新手最好

岁月流风、、 942

HDU-2795 Billboard 线段树|树状数组

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795            题意:给你一块h*w的板报,然后依次给你一些1*w的海报,每个海报优先放在顶端,询问每个海报的位置。        线段树的单点更新,记录每段的最长长度即可,然后询问优先顶端。        My code: //STATUS:C++_AC_2234MS_2300

岁月流风、、 931
上一篇: POJ-3225 Help with Intervals 线段树
下一篇: HUD-3308 LCIS 线段树
angle555945
博客等级 码龄15年 66粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值