BZOJ 1293 SCOI2009 生日礼物 堆
题目大意:给定一个数轴上n个点,每一个点有一种颜色,一共k种颜色。求一个最短的区间,包括全部k种颜色
卡了一段时间0.0 一開始想二分答案啥的 后来发现数据范围太大写不了0.0 后来去找题解才发现尼玛真巧妙
维护一个堆 将每种颜色的第一个珠子增加堆 然后不断把最左側的珠子取出,增加该种颜色的下一个 同一时候更新ans
果然这么大数据范围还是要用堆这样的常数小的数据结构啊0.0
我手写了堆却开了STL的queue 0.0 不要说我有病我仅仅是不习惯STL的堆罢了
- #include<queue>
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- using namespace std;
- typedef pair<int,int> abcd;
- int n,m,k,top,ans=0x7fffffff,maxnum=0;
- abcd heap[70];
- queue<int>q[70];
- void Insert(abcd x)
- {
- heap[++top]=x;
- int t=top;
- while( t>1 && heap[t]<heap[t>>1] )
- swap(heap[t],heap[t>>1]),t>>=1;
- }
- void Pop()
- {
- heap[1]=heap[top--];
- int t=2;
- while(t<=top)
- {
- if( t<top && heap[t+1]<heap[t] )
- ++t;
- if(heap[t]<heap[t>>1])
- swap(heap[t],heap[t>>1]),t<<=1;
- else
- break;
- }
- }
- int main()
- {
- int i,j,x;
- cin>>n>>k;
- for(i=1;i<=k;i++)
- {
- scanf("%d",&m);
- for(j=1;j<=m;j++)
- scanf("%d",&x),q[i].push(x);
- Insert(abcd(q[i].front(),i));
- maxnum=max(maxnum,q[i].front());
- q[i].pop();
- }
- ans=min(ans,maxnum-heap[1].first);
- while(1)
- {
- abcd temp=heap[1];Pop();
- if(q[temp.second].empty())
- break;
- Insert(abcd(q[temp.second].front(),temp.second));
- maxnum=max(maxnum,q[temp.second].front());q[temp.second].pop();
- ans=min(ans,maxnum-heap[1].first);
- }
- cout<<ans<<endl;
- return 0;
- }
BZOJ 1293 SCOI2009 生日礼物 堆的更多相关文章
- BZOJ 1293: [SCOI2009]生日礼物【单调队列】
1293: [SCOI2009]生日礼物 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2534 Solved: 1383[Submit][Stat ...
- [bzoj 1293] [SCOI2009] 生日礼物
传送门(bzoj) 传送门(luogu) 题目: Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应 ...
- bzoj 1293: [SCOI2009]生日礼物 问题转化 + 性质分析 + 滚动数组优化
Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩 ...
- 1293: [SCOI2009]生日礼物
1293: [SCOI2009]生日礼物 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1096 Solved: 584[Submit][Statu ...
- 1293: [SCOI2009]生日礼物 - BZOJ
Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩 ...
- bzoj1293: [SCOI2009]生日礼物(stl堆)
1293: [SCOI2009]生日礼物 题目:传送门 题解: 据说这道题乱搞随便就水过了 本蒟蒻想到了一个用堆的水法(还专门学了学queue): 如果把每一种颜色的下一个位置都记录一下的话,一开始就 ...
- bzoj1293[SCOI2009]生日礼物 尺取法
1293: [SCOI2009]生日礼物 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2838 Solved: 1547[Submit][Stat ...
- [BZOJ 1293] 生日礼物
Link: BZOJ 1293 传送门 Solution: 这题直接上尺取法就行了吧 先将每种颜色第一个放入优先队列,用$mx$维护当前的末尾位置 每次取出第一个颜色,更新答案.将其下一个放入队列中去 ...
- 【BZOJ1293】[SCOI2009]生日礼物(单调队列)
[BZOJ1293][SCOI2009]生日礼物(单调队列) 题面 BZOJ 洛谷 题解 离散之后随便拿单调队列维护一下就好了. #include<iostream> #include&l ...
随机推荐
- cmake 版本升级
1.在网址 https://cmake.org/files/v3.1/下载 cmake-3.1.0.tar.gz 2.解压 3.执行 ./configure 4.执行 make 5. 执行 ...
- [USACO15JAN]草鉴定Grass Cownoisseur (分层图,最长路,$Tarjan$)
题目链接 Solution 水水的套路题. 可以考虑到一个环内的点是可以都到达的,所以 \(tajan\) 求出一个 \(DAG\) . 然后 \(DAG\) 上的点权值就是 \(scc\) 的大小. ...
- element el-cascader设置默认值
原文:https://www.jianshu.com/p/b690d7fe6ec0 注意两点就行了 <el-form-item label="AP名称"> <el ...
- 【07】react 之 生命周期
阅读目录(Content) 实例化 getDefaultProps getInitialState componentWillMount render componentDidMount 存在期 co ...
- hdu 4293 区间DP
/* 题目大意:n个人分成若干组,每个人都描叙他们组前面有多少人后面有多少人, 求说真话的人最多有多少个. 解题思路:把同一组的人数统计起来他们组前面有x人后面有y人, num[x+1][n-y]表示 ...
- [LeetCode] Add Two Numbers 链表
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- 【jetty】Jetty与Tomcat的区别
Jetty 的架构从前面的分析可知,它的所有组件都是基于 Handler 来实现,当然它也支持 JMX.但是主要的功能扩展都可以用 Handler 来实现.可以说 Jetty 是面向 Handler ...
- ViewAnimator实现复杂的动画效果
咱们先看个原生的 AnimatorSet animatorSet = new AnimatorSet(); animatorSet.playTogether( ObjectAnimator.ofFlo ...
- svn安装配置使用小总结
1svn:版本控制系统服务端与客户端协作服务端:subversion客户端:eclipse_svn_site-1.10.5.zip插件1安装问题: 1subversion版本过高 会出现版 ...
- Educational Codeforces Round 35 A. Nearest Minimums【预处理】
[题目链接]: Educational Codeforces Round 35 (Rated for Div. 2) A. Nearest Minimums time limit per test 2 ...