俄罗斯套娃(JOISC 2016 Day 1)
俄罗斯套娃(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\)坐标轴表示所有的套娃,任意一个点只要在另一个点的右上方就可以把那点(娃娃)装进去
(横坐标为R,纵坐标为H)
这题根据人类的智慧可以得到
(直接)甩结论:最少的没被套的娃娃个数=最长的\(R\)递增,\(H\)递减的序列长度
这个可以感性理解一下,所有不在该序列上的点都必定会在一个点的右上方,所以就相当于所有多出来的点都是可以被装进另一个点中的。
离线+离散
知道这个后就去考虑每个询问,对于每个询问,若逐个计算每次的答案,用一个树状数组其中一维,显然要将一维进行离散。那么剩下的一位直接考虑进行离线处理,那么复杂度就被用优化成\(O((n+q)log_(n+q))\),可以开两个数组分别表示娃娃和询问,不过放一个数组里面一起排序会简单一些,不过注意在遇到询问和娃娃的两个值完全相同时,一定要先更新娃娃在回答询问(当时就被这个卡了。。。)
代码
#include<bits/stdc++.h>
#define FOR(i,l,r) for(int i=(l),END=(r);i<=END;i++)
#define DOR(i,r,l) for(int i=(r),END=(l);i>=END;i--)
#define loop(i,n) for(int i=0,END=(n);i<END;i++)
#define sf scanf
#define pf printf
#define pb push_back
#define pii pair<int,int>
#define R first
#define H second
#define mms(a,x) memset(a,x,sizeof a)
using namespace std;
typedef long long ll;
typedef long double db;
template<typename A,typename B>inline void chkmax(A &x,const B y){if(x<y)x=y;}
template<typename A,typename B>inline void chkmin(A &x,const B y){if(x>y)x=y;}
const int N=2e5+5;
int n,q;
pii doll[N];
struct Pt2{struct node{int x,y,id;bool operator<(const node &A)const{if(x!=A.x)return x>A.x;if(y!=A.y)return y<A.y;return id<A.id;}}A[N<<1];int b[N<<1],ans[N],ct;struct Binary_Indexed_Tree{#define lowbit(x) (x&-(x))static const int M=4e5;int c[N<<1];void update(int x,int val){while(x<=M)chkmax(c[x],val),x+=lowbit(x);}int query(int x){int ret=0;while(x)chkmax(ret,c[x]),x-=lowbit(x);return ret;}}BIT;void solve(){FOR(i,1,n)b[++ct]=doll[i].H,A[i]=(node){doll[i].R,doll[i].H,0};;FOR(i,1,q){sf("%d%d",&A[n+i].x,&A[n+i].y);A[n+i].id=i,b[++ct]=A[n+i].y;}sort(b+1,b+ct+1);ct=unique(b+1,b+ct+1)-b-1;sort(A+1,A+n+q+1);FOR(i,1,n+q)A[i].y=lower_bound(b+1,b+ct+1,A[i].y)-b;FOR(i,1,n+q){if(A[i].id)ans[A[i].id]=BIT.query(A[i].y);else {int nw=BIT.query(A[i].y);BIT.update(A[i].y,nw+1);}}FOR(i,1,q)pf("%d\n",ans[i]);}
}Pt_2;
转载于:https://www.cnblogs.com/Heinz/p/10683381.html
俄罗斯套娃(JOISC 2016 Day 1)相关推荐
- 「JOISC 2016 Day 3」回转寿司
https://loj.ac/problem/2736 题解 挺有意思的题. 考虑这种操作不好直接维护,还有时限比较长,所以考虑分块. 考虑一个操作对整个块的影响,无非就是可能把最大的拿走,再把新的元 ...
- 等比数列三角形 (数论 + 黄金分割点)+ JOISC 2016 Day3 T3 「电报」(基环树 + 拓扑排序)
文章目录 T1:等比数列三角形 题目 题解 代码实现 T2:电报 题目 题解 代码实现 T1:等比数列三角形 题目 求三边都是 ≤n 的整数,且成等比数列的三角形个数 注意三角形面积不能为 0 注意 ...
- JOISC 2016 回转寿司
题目 分块题都先考虑一个操作: 如果每次操作都是[1,n][1,n][1,n], 那么我们建一个大根堆,每次删除最大值,再把AAA塞进去即可. 再考虑一个操作: 操作完之后要根据堆和初始的数组更新出现 ...
- 【题解】「JOISC 2016 Day 3」回转寿司
想一下传送带 (233) 我记得我和 lh 说了可以对于一个整块把一堆操作放在一起处理 暴力匹配是 O(nq)O(nq)O(nq) 的. 但是如果加一个优先队列呢? 那你就可以在 O(BlogQi)O ...
- 「小组联考」第二周三次考试
「小组联考」第二周三次考试 T1 「JOISC 2016 Day 3」电报 题目 考场思考 正解 T2 「CQOI2016」路由表 题目 考场思考 正解 T3 「NOIP2014」飞扬的小鸟 题目 考 ...
- 2016计算机二级java_2016计算机二级JAVA练习题及答案
2016计算机二级JAVA练习题及答案 21.下列选项中,不能输出100个整数的.是( ). A.for(int i=0;i<100;i++) System.out.println(i); B. ...
- 电大计算机应用,(2016年电大)电大全国计算机应用考试网考.doc
(2016年电大)电大全国计算机应用考试网考 计算机基础知识一般认为,世界上第一台电子数字计算机诞生于-------.(1946年)计算机当前已应用于各种行业,各种领域,而计算机最早的设计是针对--- ...
- 2016多校赛2 A 数学推公式 E 极角排序,组合数(待补) L dp+bitset优化
2016 Multi-University Training Contest 2 A - Acperience 题意:给出w[],求S((w[i]-aB[i])^2)的最小值(B[i]为1或-1). ...
- 2016.04.09 使用Powerdesigner进行创建数据库的概念模型并转为物理模型
2016.04.09 使用Powerdesigner进行创建数据库的概念模型并转为物理模型 2016-04-09 21:10:24 本文原创受版权保护,严禁转载. 请大家不要用于商业用途,支 ...
最新文章
- linux创建组并指定gid的命令,在Linux中用groupadd命令创建组:创建具有特定GID的组及系统组...
- 如何在StackOverflow上获得第一个标签徽章-以及为什么它很重要。
- LIS路径记录(UVA481)
- 开源应用架构之asterisk
- 在java代码中设置TextView文本内容可滚动
- Google 面试题和详解
- StringBuffer,StringBuilder区别是啥
- 深入理解jvm jdk1,7(1)
- «构建并破坏它»:某些算法如何生成验证码,而另一些则如何破解
- (226)FPGA入门推荐书籍
- 为什么登录赛尔号显示服务器未开启,赛尔号之勇者无敌无法打开怎么办 赛尔号之勇者无敌登录不了解决方案...
- 环比同比YOY\QoQ及QQ\PP图Q-Q\P-P…
- 一些杂谈和对他们的认识程度
- html文件做屏保win10,win10系统把屏保设置为桌面壁纸的处理方法
- 知乎80万高赞的window10壁纸
- 黑喵桌面音乐播放器汉化版
- 网络安全等级保护备案申请指南(杭州)
- mysql 突然报错 1878 Temporary file write failure
- 微信接口php oa,你必须了解OA与微信结合的几种方式
- 胜天半子!阿里内部力荐SpringBoot全栈笔记全网首发,源码实战齐飞
热门文章
- 不止命令行-自定义VS生成事件
- C#中具有进程间通信的Singleton应用程序
- Ubuntu 20.04 LTS(Focal Fossa)发布
- linux 迁移mysql目录_linux默认mysql迁移目录
- msu文件无法运行_安装程序遇到报错?无法验证发布者?无法使用脚本直接调用?...
- 应用挂载beegfs指定目录_BeeGFS源码分析1-元数据服务概要分析
- 电脑时钟倒计时_倒计时久坐休息提醒工具
- acer软件保护卡怎么解除_人社局回应!从单位辞职了社保怎么处理
- java timestamp时间戳_求助!java中关于时间戳Timestamp的问题
- php中pdo连接数据库,PHP使用PDO连接数据库