俄罗斯套娃(JOISC 2016 Day 1) 您所在的位置:网站首页 16个俄罗斯套娃多少钱 俄罗斯套娃(JOISC 2016 Day 1)

俄罗斯套娃(JOISC 2016 Day 1)

2024-06-18 18:41| 来源: 网络整理| 查看: 265

俄罗斯套娃(JOISC 2016 Day 1) 题目描述

你开了一家卖俄罗斯套娃的店。因此,你向厂家订购了 \(N\)个俄罗斯套娃,这些娃娃被编号为 \(1\) 到 \(N\),其中第 \(i\) 个套娃是一个的直径为 \(R_i\) 高度为 \(H_i\) 的直♂柱体 。每个俄罗斯套娃都只能套高和直径严格比他小的套娃。同时只要满足条件,俄罗斯套娃可以嵌套多次。

有一天,你收到了厂家的来电,告诉你你预定的 \(N\) 个娃娃不能一次性全部做完。所以第一批只会送达直径大于等于 \(A\) 并且高度小于等于 \(B\) 的所有套娃。你需要预先安排出一个方案,使送来的套娃经过若干次嵌套后,没有被套的套娃数量最小。

由于厂家经常搞大新闻,所以他会改变 \(A\) 和 \(B\) 的值,总共 \(Q\) 次,因此你需要对每对 \((A,B)\) 都作出回答,询问之间互不干扰。

输入

第一行有两个整数 \(N\)和 \(Q\) ,表示套娃的个数和 \((A,B)\) 的对数; 之后的 \(N\) 行,每行两个数 \(R_i\) 与 \(H_i\) 表示第$ i$ 个数的直径和高度; 之后的 \(Q\) 行,每行两个数 \(A_i\) 与 \(B_i\) 表示第 \(i\) 个询问, \(A_i\) 与 \(B_i\) 的意思如上所示。

输出

一个整数,表示符合条件的方案个数。

思路 重要结论

这题每个套娃都是二维的,于是可以用\(xy​\)坐标轴表示所有的套娃,任意一个点只要在另一个点的右上方就可以把那点(娃娃)装进去

image

(横坐标为R,纵坐标为H)

这题根据人类的智慧可以得到

(直接)甩结论:最少的没被套的娃娃个数=最长的\(R\)递增,\(H\)递减的序列长度

这个可以感性理解一下,所有不在该序列上的点都必定会在一个点的右上方,所以就相当于所有多出来的点都是可以被装进另一个点中的。

离线+离散

知道这个后就去考虑每个询问,对于每个询问,若逐个计算每次的答案,用一个树状数组其中一维,显然要将一维进行离散。那么剩下的一位直接考虑进行离线处理,那么复杂度就被用优化成\(O((n+q)log_(n+q))\),可以开两个数组分别表示娃娃和询问,不过放一个数组里面一起排序会简单一些,不过注意在遇到询问和娃娃的两个值完全相同时,一定要先更新娃娃在回答询问(当时就被这个卡了。。。)

代码 #include #define FOR(i,l,r) for(int i=(l),END=(r);i=END;i--) #define loop(i,n) for(int i=0,END=(n);i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有