p1157是很气人的...自从评测机挂了后,速度就特别慢,cin已经过不了了,然而我不知道,就各种**的提交

惨兮兮惨兮兮,这还是开了小号(通过率堪忧.jpg...)...

思路就是单调队列维护,用队列存储k个数中最小数下标......还是代码加注释好懂

#include <bits/stdc++.h>
using namespace std;
int n,k;
int qm[1000006],tail=1,head=1;
int a[1000006];
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
qm[head]=1;
for(int i=2;i<=k;i++)
{
while(a[i]<a[qm[tail]]&&tail>=head)//维护单调递减,在k个数内,如果当前元素有小于队尾元素(队列中下标对应原数组中的数)
tail--;//出队
qm[++tail]=i;//入队
}
for(int i=k;i<=n;i++)
{
if(i-qm[head]==k)//如果i-队头元素下标==k,证明该换最小值了,就head++;
head++;
while(a[i]<a[qm[tail]]&&tail>=head)//同上
tail--;
qm[++tail]=i;
cout<<a[qm[head]]<<' ';
}
cout<<endl;
head=1;tail=1;
qm[head]=1;
for(int i=2;i<=k;i++)//同上,以下维护单调递增
{
while(a[i]>a[qm[tail]]&&tail>=head)
tail--;
qm[++tail]=i;
}
for(int i=k;i<=n;i++)
{
if(i-qm[head]==k)
head++;
while(a[i]>a[qm[tail]]&&tail>=head)
tail--;
qm[++tail]=i;
cout<<a[qm[head]]<<' ';
}
return 0;
}

P1158

合并果子

往年的一道noip题,思路还行...然而我被卡了差不多2天,本来想的思路对的,不知道怎么就想偏了。

总之就是没回从队中抽出最小的两个相加,出队,再将他们的和进队。说实话,如果不用STL,差不多就是一次一排序?或是二重?反正我没想出来....STL优先队列就很方便了

设一个小的优先级的队列,将最小的两个出队,在将他们的和进队。因为是n堆果子合并,所以实际只需合并n-1次

#include <bits/stdc++.h>
using namespace std;
struct cmp1
{
bool operator ()(int x, int y)
{
return x > y;//小的优先级高
}
};
priority_queue<int,vector<int>,cmp1>q;
int n,a,ans=0;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a;
q.push(a);
}
for(int i=1;i<=n-1;i++)
{
int x,y;
x=q.top();
q.pop();
y=q.top();
q.pop();
q.push(x+y);
ans+=x+y;
}
cout<<ans<<endl;
return 0;
}

P1159 假日

usaco原题。。。感觉我现在想不到算法,决定学完dp再回来补敲

单调队列练习题(oj p1157 p1158 p1159)的更多相关文章

  1. 【POJ 2823 Sliding Window】 单调队列

    题目大意:给n个数,一个长度为k(k<n)的闭区间从0滑动到n,求滑动中区间的最大值序列和最小值序列. 最大值和最小值是类似的,在此以最大值为例分析. 数据结构要求:能保存最多k个元素,快速取得 ...

  2. 2018.10.14 bzoj1915: 奶牛的跳格子游戏(单调队列优化dp)

    传送门 NOIP练习题. f[i]f[i]f[i]表示去的时候选了iii且回来的时候第一步走的是i−1i-1i−1的最优值. 显然f[i]=maxf[i]=maxf[i]=max{f[j]−sum[j ...

  3. zstu 4237 马里奥的求救——(单调队列DP)

    题目链接:http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?id=4237 这题可以转化为每次可以走g~d+x步,求最大分数,且最大分数的步数最少. ...

  4. Codeforces - 1195E - OpenStreetMap - 单调队列

    https://codeforc.es/contest/1195/problem/E 一个能运行但是会T的版本,因为本质上还是\(O(nmab)\)的算法.每次\(O(ab)\)初始化矩阵中的可能有用 ...

  5. 单调队列练习题解(切蛋糕&好消息,坏消息)

    单调队列的练习题解 前言: 在上一篇学习记录中,单调队列给出了几道练习题,因为这两道题的算法以及思路相差无几(几乎可以算是双倍经验quq),所以就在这里集中写一下相关的题解 前置知识: 见:队列专题( ...

  6. Sliding Window - 题解【单调队列】

    题面: An array of size n ≤ 106 is given to you. There is a sliding window of size k which is moving fr ...

  7. BestCoder Round #89 B题---Fxx and game(单调队列)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5945     问题描述 输入描述 输出描述 输入样例 输出样例 题意:中文题,不再赘述: 思路:  B ...

  8. 单调队列 && 斜率优化dp 专题

    首先得讲一下单调队列,顾名思义,单调队列就是队列中的每个元素具有单调性,如果是单调递增队列,那么每个元素都是单调递增的,反正,亦然. 那么如何对单调队列进行操作呢? 是这样的:对于单调队列而言,队首和 ...

  9. FZU 1914 单调队列

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=1914 题意: 给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个 ...

随机推荐

  1. hdu 2199 Can you solve this equation? (二分法)

    Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  2. (转载)Hadoop示例程序WordCount详解

    最近在学习云计算,研究Haddop框架,费了一整天时间将Hadoop在Linux下完全运行起来,看到官方的map-reduce的demo程序WordCount,仔细研究了一下,算做入门了. 其实Wor ...

  3. React生命周期总结

    React的生命周期总共8个钩子,三个will,两个Did,一个RecciveProps,一个ShouldUpdate,一个render.分为三个阶段,分别是 装载 Mounting更新 Updati ...

  4. [BZOJ3829][Poi2014]FarmCraft 贪心

    这个题应该是很容易想到贪心的,只要可是怎么贪才是科学的呢?我们分析一下题干,对于每个边只能一进一出因此,对于树上的一棵子树,我们只要一进子树就必须遍历完,因此我们只能进行一遍 dfs() 然后我们发现 ...

  5. ubuntu使用su切换root用户提示“认证失败”

    在虚拟机上安装了ubuntu,安装时提示设置密码,也设置了,但是在终端操作时,遇到权限不够的问题,于是就想到就是要切换root用户,获取最高权限. 当我使用 su 切换到root用户时,提示我输入密码 ...

  6. 移动端浏览器touch事件的研究总结

    $("body").on("touchstart", function(e) {     e.preventDefault();     startX = e. ...

  7. ambari server内存溢出

    抛出的异常信息如下: java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Me ...

  8. CSS中的块级元素、内联元素(行内元素)

    Block element 块级元素    顾名思义就是以块显示的元素,高度宽度都是可以设置的.比如我们常用 的<div>.<p>.<ul>默认状态下都是属于块级元 ...

  9. Ubuntu下修改NAT模式的IP地址

    1,查看虚拟机的网段 在编辑->虚拟网络编辑器->NAT设置->网关 IP  可以查看到虚拟机的网关 如图 2,图形化设置: 图中 Netmask设置的是255.255.255.0 ...

  10. bzoj1578 [Usaco2009 Feb]Stock Market 股票市场

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1578 [题解] 由于连续买相当于每天买,第二天卖,然后再买.所以每天最后钱尽量多一定是最优的 ...