EOJ 3246 实验室传染病

线段树,暴力。

先处理出每个点直接能感染到的最左边的和最右边的。

之后每次扩展,看向左能到达的那些点中,最左以及最右能到哪些点,更新。

看向右能到达的那些点中,最左以及最右能到哪些点,更新。

最左最右能到哪些点,可以用线段树计算区间最小值最大值。

如果某次无法更新,那么结束。

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;

int n;
struct X
{
	int x,y;
	int ll,rr;
	int id;
}s[100010];

int L[100010], R[100010], ans[100010];

bool cmp(X a,X b)
{
	return a.x<b.x;
}

int mn[2][4*100010];
int mx[2][4*100010];

int B;

void update(int op,int pos,int val,int l,int r,int rt)
{
	if(l==r)
	{
		mn[op][rt] = mx[op][rt] = val;
		return ;
	}

	int mid = ( l + r) / 2;
	if(pos<=mid) update(op,pos,val,l,mid,2*rt);
	else update(op,pos,val,mid+1,r,2*rt+1);

	mn[op][rt] = min(mn[op][2*rt], mn[op][2*rt+1]);
	mx[op][rt] = max(mx[op][2*rt], mx[op][2*rt+1]);
}

void MIN(int op,int L,int R,int l,int r,int rt)
{
	if(L<=l&&r<=R)
	{
		B = min(B,mn[op][rt]);
		return ;
	}

	int mid = ( l + r) / 2;
	if(L<=mid) MIN(op,L,R,l,mid,2*rt);
	if(R>mid) MIN(op,L,R,mid+1,r,2*rt+1);
}

void MAX(int op,int L,int R,int l,int r,int rt)
{
	if(L<=l&&r<=R)
	{
		B = max(B,mx[op][rt]);
		return ;
	}

	int mid = ( l + r) / 2;
	if(L<=mid) MAX(op,L,R,l,mid,2*rt);
	if(R>mid) MAX(op,L,R,mid+1,r,2*rt+1);
}

int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&s[i].x,&s[i].y);
		s[i].ll = s[i].x - s[i].y;
		s[i].rr = s[i].x + s[i].y;
		s[i].id = i;
	}

	sort(s+1,s+1+n,cmp);

	for(int i=1;i<=n;i++)
	{
		int left = 1, right = i, pos;
		while(left <= right)
		{
			int mid = (left + right)/2;
			if(s[mid].x >= s[i].ll) pos = mid, right = mid-1;
			else left = mid + 1;
		}

		L[i] = pos;

		left = i, right = n;
		while(left<=right)
		{
			int mid = (left + right)/2;
			if(s[mid].x <= s[i].rr) pos = mid, left = mid+1;
			else right = mid - 1;
		}

		R[i] = pos;
	}

	for(int i=1;i<=n;i++)
	{
		update(0,i,L[i],1,n,1);
		update(1,i,R[i],1,n,1);
	}

	while(1)
	{
		bool f = 0;

		for(int i=1;i<=n;i++)
		{
			B = n+1;
			MIN(0,L[i],i,1,n,1);
			if(B != L[i]) f=1, L[i] = B, update(0,i,L[i],1,n,1);
		}

		for(int i=n;i>=1;i--)
		{
			B = 0;
			MAX(1,i,R[i],1,n,1);
			if(B != R[i]) f=1, R[i] = B, update(1,i,R[i],1,n,1);
		}

		for(int i=1;i<=n;i++)
		{
			B = 0;
			MAX(1,L[i],i,1,n,1);
			if(B != R[i]) f=1, R[i] = B, update(1,i,R[i],1,n,1);
		}

		for(int i=n;i>=1;i--)
		{
			B = n+1;
			MIN(0,i,R[i],1,n,1);
			if(B != L[i]) f=1, L[i] = B, update(0,i,L[i],1,n,1);
		}

		if( f == 0 ) break;
	}

	for(int i=1;i<=n;i++) ans[s[i].id] = R[i] - L[i] + 1;

	for(int i=1;i<=n;i++)
	{
		printf("%d",ans[i]);
		if(i<n) printf(" ");
		else printf("\n");
	}

	return 0;
}
时间: 2024-12-09 23:04:48

EOJ 3246 实验室传染病的相关文章

“国家重点实验室”完全名单_洹水泛舟_新浪博客 - Google Chrome

“国家重点实验室”完全名单 单位名称(序号)   国家重点实验室名称  建设单位 中国科学院(73) 1   半导体超晶格国家重点实验室  中国科学院半导体研究所 2   应用光学国家重点实验室  中国科学院长春光学精密机械与物理研究所 3   稀土资源利用国家重点实验室  中国科学院长春应用化学研究所 4   电分析化学国家重点实验室    中国科学院长春应用化学研究所 5   催化基础国家重点实验室  中国科学院大连化学物理研究所 6   大气边界层物理和大气化学国家重点实验室  中国科学院

从之江实验室出发,18岁的阿里要做基础科研生力军

1999年9月9日,阿里巴巴成立了.2017年9月8日,阿里巴巴迎来了自己的18周年庆,数万名阿里员工从全球各地汇集到9月8日晚的杭州黄龙体育中心参加2017集团年会,包括来自21个国家的800多名外籍员工. 然而,阿里巴巴为自己准备的18周岁成年礼,却从半年前就已经开始.2017年3月9日,阿里巴巴首开杭州召开首届技术大会,动员公司两万多名技术人员投身"NASA"新技术战略:面向未来20年组建强大的独立研发部门,为服务20亿人的新经济体储备核心科技. 半年后的2017年9月6日,由浙

【NPR】非真实感渲染实验室

写在前面 前几天在知乎看到一个问题--关于非实感图形学或者风格化渲染有哪些好的书或者paper,我刚好接触过一些就去里面回答了一下.答完以后突然想在Unity里搞一个这种集锦,把一些简单的NPR论文或者教程在Unity里实现一下.于是这两天就做了一下. 我把这个项目放到了GitHub(https://github.com/candycat1992/NPR_Lab)上,有兴趣的同学能够去看一下. 项目链接:https://github.com/candycat1992/NPR_Lab 实现了哪些N

华为日本设立研发中心,4大“X实验室”布局5G+物联网时代

作者:楠沨 [IT战略家] 据悉,华为最快明年初将会在日本东京建立研发中心,这是华为在海外设立的第二个研发中心,也是华为又一个研发前沿技术的"X实验室".加上早前在德国设立的第一个海外研发中心,目前华为在全球一共有四个这样的研发中心.(注:"X实验室"为无线应用场景实验室简称) 东京研发中心建立后,华为将结合自身在日本通信设备市场的优势和日本先进技术,与日本企业及研发机构进行合作,共同研发物联网.下一代 5G 移动通信等技术.华为积极布局,是因为5G移动通信技术是物

Data.gov.uk电子政务云,牛津大学NIE金融大数据实验室王宁:数据治理的现状和实践

牛津大学NIE金融大数据实验室王宁:数据治理的现状和实践 我是牛津互联网研究院的研究员,是英国开放互联网的一个主要的研究机构和相关政策制订的一个机构.今天主要给大家介绍一下英国数据治理的一些现状和实践.Data.gov.uk就是相当于英国的电子政务云.我不知道大家还记不记得这个画面,这是2012年伦敦奥运会的时候,当时的一幕,一个房子拉开了之后一个人在里面座着打计算机,这个人是一个英国籍也是牛津大学毕业的科学家,也是万维网之父.他当时创造互联网时候当时是一个博士生,他有一个想法就是说能不能有一个

写给实验室的下一代

看到这篇文章的学弟(学妹)你好,我写这些文字时是软件杯开赛还有1个月.8月22是我软件生涯中一个比较特殊的日子.同时也是你即将正式加入我们中的日子,对你来说也一定不同寻常.很遗憾在这个特殊的日子我可能不能与你面对面的交流,然而,曾经的经历让我明白你现在一定很迷惘不知所措.这就是我早早的写下这些文字的原因. 这些文字都是我两年以来的实际感受经验以及周围人的感受经验.这不是鸡汤,我不希望看完这些文字后你是热血沸腾的,而是静静的思考一下,坦然无悔的面对自己即将选择的道路. 1.保护好你的兴趣. 据我观

突然就成了实验室负责人

上一届的实验室负责人突然就让我当了负责人.突然有些不知所错,其实我一直是很不喜欢管理别人的 , 总感觉会浪费自己的时间,也担心带不好别人.从小学到今天好像只在初三那年做过一年的英语课代表,也是被强迫的,原因就不说了. 今天破天荒的没有拒绝.感觉自己不能总是逃避吧,做就做到最好,好好带领我们实验室的人,在今年的河南省acm程序设计大赛上能够获得金奖.(好像期望有点高,哈哈有点野心才好) 好像自己的android学习也要停一段时间了.一起加油,acmer.

程序员的奋斗史(四十三)——大学断代史(七)——在实验室的日子与我的学业

文/温国兵 本篇文章讲讲我在实验室的日子及我的学业,以飨读者. 2011年8月,大一暑假.那时有一股参加实验室的浪潮,我也不例外,慌忙中投入了加入实验室的队伍.我们学院总共有6个实验室,名字都很高大上,但做的东西主要是Java Web和嵌入式.当初年少懵懂,在几位学长的推荐下,毫不犹豫地选择了A老师和B老师的实验室.我们3个同学一起去找实验室老师,老师跟我们谈了一番话,大意是说现在就业形势如此严峻,应该静下心来学点东西,把本领练到手,并且还要保证呆在实验室时间的连贯性.对此我们唯唯诺诺,就这样踏

CST.Studio.Suite.2016.SP1 电磁仿真+Mathworks.Matlab.R2016a.X64 矩阵实验室

Mathworks.Matlab.R2016a.X64 矩阵实验室 PV.Desktop.V14.0.0.1 石油化工静设备计算机辅助设计桌面系统 Agilent.Keysight.ICCAP.2016.01 Agilent.Keysight.Genesys.2015.08 Agilent.Keysight.WaferPro.Express.2015.01 Agilent.Keysight.Model.Quality(MQA).2016.01 诚信合作,质量保证:@@@@@@@@@@@@@@@@