bzoj1293: [SCOI2009]生日礼物(stl堆)】的更多相关文章

1293: [SCOI2009]生日礼物 题目:传送门 题解: 据说这道题乱搞随便就水过了 本蒟蒻想到了一个用堆的水法(还专门学了学queue): 如果把每一种颜色的下一个位置都记录一下的话,一开始就把所有的颜色开头位置加入堆中,求一下ans 然后将最左边的颜色删掉换成下一个位置并加入堆然后更新答案 因为题目保证位置升序,所以如果问当前颜色的没有了下一个位置,那就退出 代码(有点丑,因为不会求堆底所以开了两个堆): #include<cstdio> #include<cstring>…
1293: [SCOI2009]生日礼物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2838  Solved: 1547[Submit][Status][Discuss] Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上. 小布生日快到了,于是小西打算剪一段彩带送给小…
考虑poj3320尺取法的做法,与此题基本一样,但是此题的 位置 的范围到2^31 尺取法不可. 将每种珠子所在的位置排序. 每种珠子要维护一个指针,指到已经用到这个种类的哪个珠子. 所以尺取法用堆优化,每次从堆中取出最小的,相当于尺取法的头指针向后移动. 然后从每种珠子里向后取出一个位置(指针++)(已经排过序,是单调递增的),加进堆. 再从每种其他的珠子里 把 在 新加入的珠子位置之前的 位置全都加进堆. 更新答案. 直到某种类珠子已经全用完. 由于每个位置可能有很多珠子,插入堆时要用一个二…
单调队列 用一个堆维护目前每个颜色在里面的点,每回取出队首点,并更新答案.一旦哪个颜色的点都被用完,跳出循环. #include<cstdio> #include<algorithm> #include<cstring> #include<queue> using namespace std; + ; +; struct data { int a,c; data(int a,int c):a(a),c(c) {} bool operator < (co…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1293 题意概括 彩珠有N个,分为K种.每一个彩珠有一个对应的坐标.坐标上可以没有彩珠,多个彩珠也可以出现在同一个位置上.小西希望一段彩带中能包含所有种类的彩珠.帮助小西计算这段彩带这个最短的长度.彩带的长度即为彩带开始位置到结束位置的位置差. 题解 水题. 对于读入的,先离散化一下. 然后L和R卡过去就可以了.直接看代码应该就懂了吧? 如果不懂,建议去做做NOIP2016普及组T3. 代码 #i…
题目 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上. 小布生日快到了,于是小西打算剪一段彩带送给小布.为了让礼物彩带足够漂亮,小西希望这一段彩带中能包含所有种类的彩珠.同时,为了方便,小西希望这段彩带尽可能短,你能帮助小西计算这个最短的长度么?彩带的长度即为彩带开始位置到结束位置的位置差. 输入格式 第一行包含两个整数N, K,分别表示彩珠…
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1293 分析: 问题的关键就是选择每种颜色的哪一个好.可以先把每种颜色的第一个一起,更新出答案,然后把排在最前面的那个颜色的往后推一个,不断更新答案.具体操作单调队列即可.…
题目描述 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上. 小布生日快到了,于是小西打算剪一段彩带送给小布.为了让礼物彩带足够漂亮,小西希望这一段彩带中能包含所有种类的彩珠.同时,为了方便,小西希望这段彩带尽可能短,你能帮助小西计算这个最短的长度么?彩带的长度即为彩带开始位置到结束位置的位置差. 输入格式: 第一行包含两个整数N, K,分别表…
[BZOJ1293][SCOI2009]生日礼物(单调队列) 题面 BZOJ 洛谷 题解 离散之后随便拿单调队列维护一下就好了. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<vector> using namespace std; #d…
1293: [SCOI2009]生日礼物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1096  Solved: 584[Submit][Status] Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上. 小布生日快到了,于是小西打算剪一段彩带送给小布.为了让礼物彩带足…
1293: [SCOI2009]生日礼物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2534  Solved: 1383[Submit][Status][Discuss] Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上. 小布生日快到了,于是小西打算剪一段彩带送给小…
/* STL 最大堆.最小堆的应用 */ #include <iostream> #include <vector> #include <algorithm> // using namespace std; /* STL 堆操作 (1)make_heap()构造堆 void make_heap(first_pointer,end_pointer,compare_function); 默认比较函数是(<),即最大堆. 函数的作用是将[begin,end)内的元素处理…
P2564 [SCOI2009]生日礼物 三个字.尺取法......... 坐标按x轴排序. 蓝后尺取一下.......... #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; inline int Min(int a,int b){return a<b?a:b;} void read(int &x){ ;…
NC20565 [SCOI2009]生日礼物 题目 题目描述 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有 \(N\) 个,分为 \(K\) 种.简单的说,可以将彩带考虑为 \(x\) 轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上. 小布生日快到了,于是小西打算剪一段彩带送给小布.为了让礼物彩带足够漂亮,小西希望这一段彩带中能包含所有种类的彩珠.同时,为了方便,小西希望这段彩带尽可能短,你能帮助小西计算这个最短的长度么?彩带的…
题目大意:给定一个数轴上n个点,每一个点有一种颜色,一共k种颜色.求一个最短的区间,包括全部k种颜色 卡了一段时间0.0 一開始想二分答案啥的 后来发现数据范围太大写不了0.0 后来去找题解才发现尼玛真巧妙 维护一个堆 将每种颜色的第一个珠子增加堆 然后不断把最左側的珠子取出,增加该种颜色的下一个 同一时候更新ans 果然这么大数据范围还是要用堆这样的常数小的数据结构啊0.0 我手写了堆却开了STL的queue 0.0 不要说我有病我仅仅是不习惯STL的堆罢了 #include<queue>…
http://www.lydsy.com/JudgeOnline/problem.php?id=1293 https://www.luogu.org/problemnew/show/P2564#sub 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上. 小布生日快到了,于是小西打算剪一段彩带送给小布.为了让礼物彩带足够漂亮,小西希望这一段彩带中…
浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=1293 这里介绍一种尺取法.(此处的尺意味游标卡尺) 从左至右依次测量以当前点为右端点的区间"长度",那么左端点呢? 能用尺取法做的题必然满足当右端点不断往右移的时候,左端点不会往左移. 所以我们每次就去\(check\)一下左端点是否能往右移,如果可以那就不断地去"卡紧&…
洛谷P3378 [模板]堆 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; typedef long long ll; ; inline int read(){ ,f=; ;c=getchar();} +c-';c=getchar();} return x*f; } int n,op,x; ; inline b…
2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1003  Solved: 317[Submit][Status][Discuss] Description ftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列 A1, A2, ..., AN. 她被允许选择不超过 M 个连续的部分作为自己的生日礼物. 自然地,ftiasch想要知道选择元素之和的最大值.你能帮助她吗? Inpu…
本来是要写leetcode上的merge k sorted lists那道题目,这个题目我还是很熟悉的,毕竟是看过算法导论的人,但是写的过程中对堆的维护代码还是挺多的,所以我想到了STL中的堆.下面就来学习一下这个STL. 先介绍一个非常好的学习C++的网站 http://www.cplusplus.com/ 这个网站对C++的理解还是很好的,个人觉得比msdn要好不知道哪里去了. 对堆的操纵主要有以下四个: make_heap, pop_heap, push_heap, sort_heap 他…
题目 ftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列 A1, A2, ..., AN. 她被允许选择不超过 M 个连续的部分作为自己的生日礼物. 自然地,ftiasch想要知道选择元素之和的最大值.你能帮助她吗? 输入格式 第1行,两个整数 N (1 ≤ N ≤ 105) 和 M (0 ≤ M ≤ 105), 序列的长度和可以选择的部分. 第2行, N 个整数 A1, A2, ..., AN (0 ≤ |Ai| ≤ 104), 序列. 输出格式 一个整数,最大的和. 输…
概念 性质: 1.堆是一颗完全二叉树,用数组实现.    2.堆中存储数据的数据是局部有序的. 最大堆:1.任意一个结点存储的值都大于或等于其任意一个子结点中存储的值.      2.根结点存储着该树所有结点中的最大值. 最小堆:1.任意一个结点存储的值都小于或等于其惹你一个子结点存储的值.      2.根结点存储着该树所有结点中的最小值. 无论最小堆还是最大堆,任何一个结点与其兄弟结点之间都没有必然联系. STL中并没有把heap作为一种容器组件,heap的实现亦需要更低一层的容器组件(诸如…
https://www.luogu.org/problemnew/show/P2564) 题意 有n个珠子,包括k中颜色,找出长度最小的一个区间,使得这个区间中包含所有的颜色. 思路 把n个珠子按照位子排序,然后维护每个珠子最右边能到的位子就行了. #include <algorithm> #include <iterator> #include <iostream> #include <cstring> #include <cstdlib> #…
BZOJ2288 [POJ Challenge]生日礼物 题意: 给一个长度为\(n\)的数组,最多可以选\(m\)个连续段,问选取的最大值是多少 题解: 先把连续的符号相同的值合并,头和尾的负数去掉 然后如果正数的数量小于等于\(m\)的话,就直接输出正数的和 否则现在存在两种操作可以减少连续段数量 少选一个正数 选上两个正数之间的负数,把两边合并 显然不可能选相邻的一正一负 现在问题转化为选择\(k\)个不连续的数,使得其绝对值的和最小 然后就和这道题一样了:BZOJ1150 [CTSC20…
Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上. 小布生日快到了,于是小西打算剪一段彩带送给小布.为了让礼物彩带足够漂亮,小西希望这一段彩带中能包含所有种类的彩珠.同时,为了方便,小西希望这段彩带尽可能短,你能帮助小西计算这个最短的长度么?彩带的长度即为彩带开始位置到结束位置的位置差.Input 第一行包含两个整数N,…
传送门(bzoj) 传送门(luogu) 题目: Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上. 小布生日快到了,于是小西打算剪一段彩带送给小布.为了让礼物彩带足够漂亮,小西希望这一段彩带中能包含所有种类的彩珠.同时,为了方便,小西希望这段彩带尽可能短,你能帮助小西计算这个最短的长度么?彩带的长度即为彩带开始位置到结…
题目 一道模拟和队列题,但模拟比队列的成分多一些.队列也就是用两个指针模拟的. 可以用枚举的思想.首先我们知道r(即区间的右端点是肯定不会左移的),而l右移的同时,r可能不变,也可能右移,所以这样就可以不用\(O(n^2)\)处理了,剩下的就只剩下模拟的细节. #include <bits/stdc++.h> #include <queue> using namespace std; struct ha { int a, x; }data[1010011]; int n, k, c…
题目背景 四川2009NOI省选 题目描述 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上. 小布生日快到了,于是小西打算剪一段彩带送给小布.为了让礼物彩带足够漂亮,小西希望这一段彩带中能包含所有种类的彩珠.同时,为了方便,小西希望这段彩带尽可能短,你能帮助小西计算这个最短的长度么?彩带的长度即为彩带开始位置到结束位置的位置差. 输入输出格式…
https://www.luogu.org/problem/show?pid=2564 题目描述 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上. 小布生日快到了,于是小西打算剪一段彩带送给小布.为了让礼物彩带足够漂亮,小西希望这一段彩带中能包含所有种类的彩珠.同时,为了方便,小西希望这段彩带尽可能短,你能帮助小西计算这个最短的长度么?彩带的…
题目背景 四川2009NOI省选 题目描述 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上. 小布生日快到了,于是小西打算剪一段彩带送给小布.为了让礼物彩带足够漂亮,小西希望这一段彩带中能包含所有种类的彩珠.同时,为了方便,小西希望这段彩带尽可能短,你能帮助小西计算这个最短的长度么?彩带的长度即为彩带开始位置到结束位置的位置差. 输入输出格式…