layout: post
title: 洛谷试炼场 4-8单调队列
author: "luowentaoaa"
catalog: true
mathjax: true
tags:
- 单调队列
- 洛谷


[P2698 USACO12MAR]花盆Flowerpot (二分+单调队列)

题解

二分区间

做两个单调队列记录最大最小值,如果差大于D就OK

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=998244353;
const int maxn=1e6+50;
const ll inf=0x3f3f3f3f3f3f3f3fLL;
struct node{int x,y;bool operator <(const node &a)const{return x<a.x;}
}a[maxn];
int n,d;
int qmax[maxn],qmin[maxn];
bool ok(int mid){int h1=1,h2=1,t1=0,t2=0;for(int i=1;i<=n;i++){while(h1<=t1&&a[i].y>a[qmax[t1]].y)t1--;qmax[++t1]=i;while(h2<=t2&&a[i].y<a[qmin[t2]].y)t2--;qmin[++t2]=i;while(h1<=t1&&a[i].x-a[qmax[h1]].x>mid)++h1;while(h2<=t2&&a[i].x-a[qmin[h2]].x>mid)++h2;if(a[qmax[h1]].y-a[qmin[h2]].y>=d)return true;}return false;
}
int main()
{std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);cin>>n>>d;for(int i=1;i<=n;i++){cin>>a[i].x>>a[i].y;}sort(a+1,a+1+n);int ans=-1,l=0,r=1e8;while(l<=r){int mid=(l+r)/2;if(ok(mid)){ans=mid;r=mid-1;}else l=mid+1;}cout<<ans<<endl;return 0;
}

[HAOI2007]理想的正方形 (二维单调队列)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=998244353;
const int maxn=1e6+50;
const ll inf=0x3f3f3f3f3f3f3f3fLL;
int value[1100][1100];
int qmin[1100],qmax[1100];
int hmin[1100][1100],hmax[1100][1100];
int lmin[1100][1100],lmax[1100][1100];
void print(int a,int b,int p[][1100]){for(int i=1;i<=a;i++){for(int j=1;j<=b;j++){cout<<p[i][j]<<" ";}cout<<endl;}
}
int main()
{std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);int a,b,n;cin>>a>>b>>n;for(int i=1;i<=a;i++){for(int j=1;j<=b;j++){cin>>value[i][j];}}for(int i=1;i<=a;i++){int head1=1,tail2=0,head2=1,tail1=0;for(int j=1;j<=b;j++){while(head1<=tail1&&value[i][j]<value[i][qmin[tail1]])tail1--;qmin[++tail1]=j;while(head2<=tail2&&value[i][j]>value[i][qmax[tail2]])tail2--;qmax[++tail2]=j;while(j-qmin[head1]>=n)head1++;while(j-qmax[head2]>=n)head2++;if(j>=n)hmin[i][j-n+1]=value[i][qmin[head1]],hmax[i][j-n+1]=value[i][qmax[head2]];}}// cout<<endl;print(a,b,hmin);cout<<endl;print(a,b,hmax);cout<<endl;for(int i=1;i<=b-n+1;i++){int head1=1,tail2=0,head2=1,tail1=0;for(int j=1;j<=a;j++){while(head1<=tail1&&hmin[j][i]<hmin[qmin[tail1]][i])tail1--;qmin[++tail1]=j;while(head2<=tail2&&hmax[j][i]>hmax[qmax[tail2]][i])tail2--;qmax[++tail2]=j;while(j-qmin[head1]>=n)head1++;while(j-qmax[head2]>=n)head2++;if(j>=n)lmin[j-n+1][i]=hmin[qmin[head1]][i],lmax[j-n+1][i]=hmax[qmax[head2]][i];}}//  print(a,b,lmin);cout<<endl;print(a,b,lmax);int ans=inf;for(int i=1;i<=a-n+1;i++)for(int j=1;j<=b-n+1;j++)ans=min(ans,lmax[i][j]-lmin[i][j]);cout<<ans<<endl;return 0;
}

[P2564 SCOI2009]生日礼物 (尺取法)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=998244353;
const int maxn=1e6+50;
const ll inf=0x3f3f3f3f3f3f3f3fLL;
struct node{int kind;ll x;bool operator<(const node &a)const{return x<a.x;}
}my[maxn];
vector<node>ve;
int num[maxn];
int has[maxn];
int main()
{std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);int n,k;cin>>n>>k;for(int i=1;i<=k;i++){int tot;cin>>tot;ll w;while(tot--){cin>>w;ve.push_back(node{i,w});}}sort(ve.begin(),ve.end());ll st=0,ans=inf;deque<node>dq;for(int i=0;i<ve.size();i++){node now=ve[i];dq.push_back(now);num[now.kind]++;if(num[now.kind]==1)st++;while(st>=k){node head=dq.front();node tail=dq.back();ans=min(ans,tail.x-head.x);dq.pop_front();num[head.kind]--;if(num[head.kind]==0)st--;}}cout<<ans<<endl;return 0;
}

[P2569 SCOI2010]股票交易(单调队列优化DP)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=998244353;
const int maxn=1e6+50;
const ll inf=0x3f3f3f3f3f3f3f3fLL;
int n,m,ap,bp,as,bs,w,ans=0,f[2020][2020],head,tail,q[2020];
int main()
{std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);cin>>n>>m>>w;memset(f,-inf,sizeof(f));for(int i=1;i<=n;i++){cin>>ap>>bp>>as>>bs;for(int j=0;j<=as;j++)f[i][j]=-1*j*ap;for(int j=0;j<=m;j++)f[i][j]=max(f[i][j],f[i-1][j]);if(i<=w)continue;head=1,tail=0;for(int j=0;j<=m;j++){while(head<=tail&&q[head]<j-as)head++;while(head<=tail&&f[i-w-1][q[tail]]+q[tail]*ap<f[i-w-1][j]+j*ap)tail--;q[++tail]=j;if(head<=tail)f[i][j]=max(f[i][j],f[i-w-1][q[head]]+q[head]*ap-j*ap);}head=1,tail=0;for(int j=m;j>=0;j--){while(head<=tail&&q[head]>j+bs)head++;while(head<=tail&&f[i-w-1][q[tail]]+q[tail]*bp<f[i-w-1][j]+j*bp)tail--;q[++tail]=j;if(head<=tail)f[i][j]=max(f[i][j],f[i-w-1][q[head]]+q[head]*bp-j*bp);}}for(int i=0;i<=m;i++)ans=max(ans,f[n][i]);cout<<ans<<endl;return 0;
}

转载于:https://www.cnblogs.com/luowentao/p/10356968.html

洛谷试炼场 4-8单调队列相关推荐

  1. 【洛谷 P1638】 【单调队列】 逛画展

    [洛谷 P1638] [单调队列] 逛画展 题目 解题思路 先求出最前面囊括所有画的位置 然后如果左边界的画不止存在一次,左边界右移 不断扩展右边界,求取答案 代码 #include<iostr ...

  2. 洛谷 - P1886 滑动窗口(单调队列/线段树)

    题目链接:点击查看 题目大意:给出一个由n个数构成的序列,再给出一个长度为k的窗口,这个窗口从第一个下标开始一直向后移动,每次移动一个单位,每次移动询问一次该窗口中的最大值和最小值,最后输出答案 题目 ...

  3. [USACO18JAN]Lifeguards P 洛谷黑题,单调队列优化DP

    传送门:戳我 这道题有两个版本,S和P,S是K等于1的情况,显然可以用线段树水过. P版本就难了很多,洛谷黑题(NOI/NOI+/CTSC),嘿嘿. 我自己也不是很理解,照着题解写了一遍,然后悟到了一 ...

  4. 【洛谷】【动态规划+单调队列】P1725 琪露诺

    [题目描述:] 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河 ...

  5. 洛谷 - P1714 切蛋糕(单调队列+前缀和+思维)

    题目链接:点击查看 题目大意:给出一个由n个数组成的序列,求长度不超过m的连续子段和中的最大值 题目分析:因为给出了一个限制条件,所以这就不能当普通的动态规划来做了,我们可以跑一遍前缀和,然后枚举每一 ...

  6. 【OJ】洛谷试炼场の新手村整合(Java语言描述)

    Pass 最近通关了洛谷试炼场新手村Part,做了很多的红题和橙题,这里做一下整理吧,希望对需要的人有所帮助. 说明 这些内容确实不是什么复杂的东西,所以无需多言. 洛谷的第一个任务 这里是我写的所有 ...

  7. 洛谷试炼场-简单数学问题-二分查找

    洛谷试炼场-简单数学问题 P1147 连续自然数和 题解: 本题给定一个数n,求连续自然数的和为n,用一个前缀数组,low_bound,upper_bound,查找是否是同一个数.O(nlog(n)) ...

  8. 洛谷试炼场 P1553 数字反转(升级版)题解

    洛谷试炼场 P1553 数字反转(升级版)题解 [c] 题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数. ...

  9. 洛谷 - 试炼场(全部题目备份)

    整理的算法模板合集: ACM模板 目录 1.新手村 1 - 1 洛谷的第一个任务 1 - 2 顺序与分支 1 - 3 循环!循环!循环! 1 - 4 数组 1 - 5 简单字符串 1 - 6 过程函数 ...

最新文章

  1. 一种注册表沙箱的思路、实现——Hook Nt函数
  2. 使用Emit反射建立运行时实体模型
  3. Jquery 操作checkbox
  4. 【编码】-整数排序-2016.08.10
  5. 基于SSM的景区旅游管理系统
  6. 搜索和内容生态的关系
  7. unity 彩带粒子_随机四处散发的粒子光带效果unity3d源码下载!Unity3D Particle Ribbon粒子带源码下载...
  8. Java关于周跨年的周数计算,编写一个JAVA类,用于计算两个日期之间的周数。
  9. 什么是反向跟单?反向跟单怎么运作?
  10. 快递物流配货发货系统学习--以京东物流为例
  11. CF卡插到时显示函数不正确请问咋才能修复?
  12. 2022年系统集成项目管理工程师考试知识点:区块链
  13. 激活函数选取不当为什会造成梯度消失
  14. 一个关于Linux Bridge配置的吐嘈
  15. myeclipse浅灰色主题/配色
  16. ps中常用模糊的区别
  17. 【基础入门题072】转置矩阵
  18. vs2010配置python_win7 环境安装Python + IDE(vs2010)开发
  19. 上岸算法 -北美求职套路全解析
  20. VNCTF2023-misc方向wp

热门文章

  1. Windows远程桌面设置多用户同时登录
  2. 数据结构第一天之数组
  3. HAVE FUN | 源码解析活动最新进展
  4. RGB深度图转换成点云-三维重建001
  5. 计算机科学与技术 网瘾,曾经电击治疗网瘾的杨永信,受无数家长追捧,现在如何了?...
  6. 什么是 Linux ?
  7. 网站营运策划概略分析
  8. apt-get upgrade 和 dist-upgrade 之间的区别
  9. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第十九讲:apache+php+mysql开发环境搭建(wamp)
  10. 关于EnterCriticalSection()