当前位置: 首页 > news >正文

洛谷 P3660 USACO17FEB Why Did the Cow Cross the Road III 题解

题意

有一个圆,圆周上按顺时针方向给出 2 n 2n 2n个点。第 i i i个点的颜色是 c o l o r i color_i colori,其中数据保证 1 ≤ c o l o r i ≤ n 1\le color_i\le n 1colorin,而且每种不同的颜色有且只有两个点。不存在位置重叠的点。在颜色相同的两个点之间连一条边(线段)。

求有多少对边是交叉的?

1 ≤ n ≤ 50000 1\le n \le 50000 1n50000

在这里插入图片描述

思路

转换一下题意,把所谓的“圆圈”拉平成一条直线上的 2 n 2n 2n个点,以相等的两个数的下标作为两端点连一条线段,求线段存在交集且不存在全包含关系的对数。在这里插入图片描述
遇到线段覆盖问题,可以考虑使用树状数组来维护区间内的点数个数。枚举到一条线段,就在树状数组上给两端端点分别加一;计算一条线段 i ( l e − r i ) i(le-ri) i(leri)的贡献就是 q u e r y ( r i i − 1 ) − q u e r y ( l e i ) query(ri_i-1)-query(le_i) query(rii1)query(lei)

这样算难道不会算重吗?

可以先考虑处理长度更长的线段,如果一条线段 b b b被线段 a a a完全覆盖,必然有 l e n a > l e n b len_a>len_b lena>lenb,此时会先处理 a a a再处理 b b b,就不会多算 b b b的两端节点了。

对于其它的线段,要么与线段 a a a本身相离,当然不会计入贡献,要么一端端点在开区间 ( l e a , r i a ) (le_a,ri_a) (lea,ria)内,计入贡献为 1 1 1

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ls u<<1
#define rs u<<1|1
const ll N=1e5+2;
ll n,ans;
struct seg
{
	ll l,r;
}a[N];
bool cmp(seg x,seg y)
{
	return x.r-x.l>y.r-y.l;
}
struct BT
{
	ll T[N];
	ll lowbit(ll x)
	{
		return x&(-x);
	}
	void add(ll x,ll k)
	{
		for(int i=x;i<=n*2;i+=lowbit(i))
		T[i]+=k;
	}
	ll query(ll x)
	{
		ll ret=0;
		for(int i=x;i>=1;i-=lowbit(i))
		ret+=T[i];
		return ret;
	}
}B;
int main()
{
	scanf("%lld",&n);
	for(int i=1;i<=n*2;i++)
	{
		ll x;
		scanf("%lld",&x);
		if(!a[x].l)a[x].l=i;
		else a[x].r=i;
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++)
	{
		B.add(a[i].l,1);
		B.add(a[i].r,1);
		ans+=B.query(a[i].r-1)-B.query(a[i].l);
	}
	printf("%lld",ans);
	return 0;
}

相关文章:

  • 云点SEO:外贸独立站谷歌SEO优化的五大优势
  • Python----PyQt开发(PyQt高级:界面切换,信号与槽功能pyqtSignal)
  • Java基础概念
  • 国产编辑器EverEdit - 上下翻滚不迷路(历史编辑位置、历史光标位置回溯功能)
  • Typora“使用”教程
  • SpringBoot开发——初步了解SpringBoot
  • UE_C++ —— UObject Instance Creation
  • AcWing——1571. 完美序列
  • 无人机航迹规划:互联银行系统优化(Connected Banking System Optimizer,CBSO)求解无人机路径规划MATLAB
  • JavaScript作用域与闭包
  • 数字内容体验优化策略:全渠道整合与高效转化实践
  • NVIDIA Jetson Orin Nano 刷机过程
  • Unity Shader Graph 2D - Procedural程序化图形循环的箭头
  • 《AI大模型开发笔记》deepseek提示词技巧
  • 易语言写NFC标签URI网址NDEF记录
  • 17.企业级知识图谱中的知识库全景解析(基本概念、 5W2H视角知识库、存储格式分类与技术对比、实践路径与架构设计、案例)
  • 分享一个使用的音频裁剪chrome扩展-Ringtone Maker
  • android 源码切换分支
  • 第 15 天:数据存储,打造存档 读取系统!
  • CAD字体 SHX字体下载
  • 墨西哥宣布就“墨西哥湾”更名一事起诉谷歌
  • 五粮液董事长:茅台1935已脱离千元价位带,五粮液在千元价位已逐步摆脱其他竞品纠缠
  • 碧桂园境外债务重组:相当于现有公众票据本金额逾50%的持有人已加入协议
  • 新村回响:一周城市生活
  • 东洋学人|滨田青陵:近代日本考古学第一人
  • 股价两天涨超30%,中航成飞:不存在应披露而未披露的重大事项