首页 > 其他分享 >P2286 [HNOI2004] 宠物收养场 题解

P2286 [HNOI2004] 宠物收养场 题解

时间:2024-07-04 11:42:00浏览次数:19  
标签:set int 题解 宠物 bound 查找 HNOI2004 P2286

P2286 [HNOI2004] 宠物收养场 set做法

题链\(_{洛谷}\) \(_{题库}\)

思路

一眼查找前驱后继的题。注意到一句话:

image

那么用 set 就没有什么阻碍了,方便又快捷。

题意很简单,若宠物多则查找与人需求最接近的上下两个值,人多则找与宠物最接近的上下两个人的值。出题人很善良,把选人和选宠物的标准定成一样的,这样我们只写一个平衡树就可以了。

但不想写平衡树而 vector 的时间开销很大,那么我们考虑 set(不会 set 的看这里),set 是以红黑树的形式实现的,速度要快不少。

操作很简单,如果来的人(或宠物)与当前余下的同类就插入 set,如果 set 空了就改变余下的类型并插入,若不同类就进行查找,只用到迭代器 set<int>::iteratorlower_bound 查找操作。

code:

#include<bits/stdc++.h>
using namespace std;
const int Ratio=0;
const int maxx=2147483647;
int n,ans,lx;
set<int>s;
namespace Wisadel
{
	void Wfind(int x)
	{
		set<int>::iterator l,r;
		l=--s.lower_bound(x),r=s.lower_bound(x);
		if(x-*l<=*r-x&&*l!=-maxx) ans+=x-*l,s.erase(l);
		else ans+=*r-x,s.erase(r);
		//查找 更新答案
		ans%=1000000;
	}
	short main()
	{
		scanf("%d",&n);
		s.insert(-maxx),s.insert(maxx);//防止越界
		for(int i=1;i<=n;i++)
		{
			int a,b;
			scanf("%d%d",&a,&b);
			if(s.size()==2) lx=a,s.insert(b);
			else if(lx==a) s.insert(b);
			else Wfind(b);
		}
		printf("%d\n",ans);
		return Ratio;
	}
}
int main(){return Wisadel::main();}

完结撒花~

标签:set,int,题解,宠物,bound,查找,HNOI2004,P2286
From: https://www.cnblogs.com/Ratio-Yinyue1007/p/18283351

相关文章

  • 刺杀 题解
    题目简述你在玩一个游戏,需要刺杀\(n\)个敌人。可以肉搏或者用子弹击杀敌人。肉搏第\(i\)个敌人会使你的体力值减少\(x_i\),你要保证你的体力值始终非负。击杀第\(i\)个敌人后,会获得\(y_i\)颗子弹,有可能\(y_i\)为\(0\),这时候你啥都拿不到。你初始体力值为\(s\),有一个......
  • P10589 题解
    经典题。tag:数状数组。开一个权值树状数组,从左往右遍历,统计左边比\(y_i\)小的数字个数\(ul_i\)与比\(a_i\)大的数字个数\(dl_i\);然后从右往左遍历,统计右边比\(y_i\)小的数字个数\(dr_i\)与比\(a_i\)大的数字个数\(ur_i\)。两个答案即为\(\sum_{i=1}^ndl_i\cdo......
  • CSP-S 2005 T1 谁拿了最多奖学金【题解】
    1.题目描述某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:院士奖学金,每人 8000 元,期末平均成绩高于 80 分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;五四奖学金,每人 4000 元,期末平均成绩高于 85 分(>85),并且班级......
  • 历年CSP-J初赛真题解析 | 2018年CSP-J初赛选择题(1-15)
    学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。附上汇总贴:历年CSP-J初赛真题解析|汇总_热爱编程的通信人的博客-CSDN博客第1题以下哪一种设备属于输出设备()A.扫描仪B.键盘C.鼠标D.打印机【答案】:D【解析】A、B、C都是输入设备第2题下列......
  • P7690 [CEOI2002] A decorative fence 题解
    题目传送门前置知识计数DP解法方案数统计同luoguP2467[SDOI2010]地精部落,但部分写得不太好看的状态转移方程在本题中并不适用,但仍可借鉴其“离散化”思想。考虑试填。设\(f_{i,j,0/1}\)表示用\(i\)块不同的木板构成栅栏,其中最左边的木板的长度从小到大排在第\(j\)......
  • [JLU] 数据结构与算法上机题解思路分享-课程设计第一次与第二次上机
    前言首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。这里只是思路解析的博客,代码仓库在JLU_Data_Structures_Record希望你能在这里找到你想要的:)第一次上机A网络布线分数50作者朱允刚单位吉林大学2024年亚洲杯足球赛刚刚落下帷幕,......
  • 考试题解
    20240703DSroundT1考虑区间子区间问题直接扫描线加历史版本和,考虑修改。现在扫到\(r\),线段树每个位置\(i\)维护的是\(i\)到\(r\)的区间\(lca\),这些\(lca\)的深度具有单调性,考虑直接二分一下位置,然后\(r\)扫到\(r+1\)时,深度大于\(lca(r,r+1)\)的\(......
  • AT_dp_y Grid 2 题解
    题目传送门前置知识计数DP|排列组合解法正难则反,考虑求出总方案数和至少经过一个黑色格子的方案数,二者作差即为所求。强制增加一个黑色格子\((h,w)\),使得存在一条至少经过一个黑色格子的路径。如果没有“不能移动到黑色格子中”的限制,那么就是一个简单的格路计数问题,方......
  • 7.1 lxl DS Day1 题解
    7.1lxlDSDay1题解P7124[Ynoi2008]stcm性质1:考虑轻儿子的子树和为\(O(nlogn)\)。证明:考虑每个结点会对多少个轻祖先做贡献,也就是重链个数,考虑每个节点到根节点重链条数为\(O(nlogn)\),所以子树和为\(O(nlogn)\)。所以对于一条重链,如果我们已经插入了链头的补集,......
  • MySQL在本机环境安装过程及问题解决
    最近在我的Windows10电脑上搭建MySQL数据库环境,没想到居然遇到了不少问题,特记录下来,希望给大家帮助,少走弯路。下载MySQLCommunityServer https://dev.mysql.com/downloads/mysql/ MySQLCommunityServeristheworld'smostpopularopensourcedatabase.这个社区......