首页 > 其他分享 >[USACO12MAR]Flowerpot S 单调队列

[USACO12MAR]Flowerpot S 单调队列

时间:2023-04-13 21:34:08浏览次数:42  
标签:typedef 队列 Flowerpot long int ans USACO12MAR fi define

[USACO12MAR]Flowerpot S

tag:单调队列

很惭愧,今天发现自己连滑动窗口都不会了,遂做了一些题

两滴水的高度之差大于等于D的情况下的最小花盆宽度

暴力思路:对于任意两点求水滴高度差是否大于等于D,若大于等于\(D\)则计算最下的两点距离 \(w\)

但这显然是能过但不完全过,手玩一下样例,是求\(\text{区间的最小长度}\),在\(\text{区间最大值和区间最小值的差}\) \(\geq D\)的情况下。

那么答案即为:

	ans = min(ans, a[i].fi - a[l].fi);

发现和滑动窗口很像,但每次往区间加入元素,那如何区间弹出元素?
只要计算答案的时候每次左移\(\text{区间左端点}l\)即可,

//  AC one more times

#include <bits/stdc++.h>

using namespace std;

#define fi first
#define se second
#define pb push_back
#define endl '\n'
#define all(x) (x).begin(), (x).end()
#define inf64 0x3f3f3f3f3f3f3f3f

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<long long,long long> pll;

const int mod = 1e9 + 7;
const int N = 1e5 + 10;




int n, d;
int q1[N], q2[N];
//  max    min
int h1 = 1, t1 = 0, h2 = 1, t2 = 0;
pii a[N];


void solve()
{
    cin>>n>>d;
    for(int i = 1; i <= n; i++)
        cin>>a[i].fi>>a[i].se;

    sort(a + 1, a + n + 1);
    int l = 1;
    int ans = 1e9;
    for(int i = 1; i <= n; i++)
    {
        while(h1 <= t1 && a[q1[t1]].se < a[i].se)
            t1--;
        q1[++t1] = i;

        while(h2 <= t2 && a[q2[t2]].se > a[i].se)
            t2--;
            
        q2[++t2] = i;
        while(l <= i && a[q1[h1]].se - a[q2[h2]].se >=d)
        {
            ans = min(ans, a[i].fi - a[l].fi);
            l++;
            while(h1 <= t1 && q1[h1] < l)
                h1++;
            while(h2 <= t2 && q2[h2] < l)
                h2++;
        }
    }

    if(ans == 1e9)
    {
        cout<<-1<<endl;
    }
    else
        cout<<ans<<endl;



    return;
}


int main()
{
    std::ios::sync_with_stdio(false);   cin.tie(nullptr), cout.tie(nullptr);
    // 特殊输入 请注释上方,如__int128等
    int TC = 1;
    //cin >> TC;
    for(int tc = 1; tc <= TC; tc++)
    {
        //cout << "Case #" << tc << ": ";
        solve();
    }


    return 0;
}

标签:typedef,队列,Flowerpot,long,int,ans,USACO12MAR,fi,define
From: https://www.cnblogs.com/magicat/p/17316484.html

相关文章

  • 华为认证HCIE Datacom培训理论技术学习关于中队列技术
    华为认证HCIEDatacom培训理论技术学习关于中队列技术关注WOLFLAB网络技术实验室,讲师:崔志鹏,杨广成。关注我,每周都会更新,华为认证WOLFLAB网络技术实验室!华为认证HCIE(1) FIFO:先进先出队列,是单队列技术,不会引入额外延迟,延迟只与队列长度有关,不提供任何差分服务。(2) RR:轮询调度,采用轮询......
  • 栈实现队列
    用两个栈实现队列题目链接 思路首先,梳理下栈和队列的概念,如下图栈中所有数据遵循后入先出,而队列是先入先出然后,理解用两个栈模拟出的队列结构最后思考如何用模拟出的队列实现入队,出队,取队头数据和判空操作,这里说一下我的思路入队:入pushst栈出队:将pu......
  • 3.【RabbitMQ实战】- 工作队列(Work Queue)
    工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。轮询分发消息......
  • 双向队列from collections import deque
    发音:/dek/ fromcollectionsimportdequedq=deque(range(10),maxlen=10)print(dq)dq.rotate(3)print(dq)dq.rotate(-4)print(dq)dq.appendleft(-1)print(dq)dq.extend([11,22,33])print(dq)dq.extendleft([10,20,30,40])print(dq)  ......
  • 数据结构-->设计循环队列(OJ)
    各位好友,今天我们着重讲解,如何设计出一个循环队列,以及一些大坑如何避免与规避 !!题目如下:本道OJ稍微有些复杂了。可以说,是前面几期的栈与队列的试金石 至于思路,在这里特别强调一下,千万别用--->链表去实现,因为贼恶心!!太难控制,以及不好操作比如,若用链表,那么你在找尾的时候贼难......
  • 队列实现栈
    用两个队列实现一个栈题目链接题目描述 解题思路首先梳理下队列和栈的概念,队列是所有数据先入先出,而栈是后入先出第二步,用两个队列结构模拟出一个栈结构第三步,思考如何用模拟出来的栈,完成入栈,出栈,取栈顶数据和判空操作,这里说一下我的思路入栈:入不为空的......
  • UVa 757 / POJ 1042 / East Central North America 1999 Gone Fishing (枚举&贪心&想
    757-GoneFishingTimelimit:3.000secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=698http://poj.org/problem?id=1042Johnisgoingonafishingtrip.Hehas h hoursavailable( ),andther......
  • 4月11日栈和队列
    栈与队列与之前的类都有所不同,他们类似于一个适配器,他们的实现时给一个给定的表加一定的限制或属性使其成为队列或者栈,可以看到他们里面的成员变量就是一个容器,而插入和删除也都是对里面容器的尾删和插入等,但是要注意的是因为顺序表效率原因不支持头插,所以队列的容器也不能支持......
  • Python queue (队列)
     importthreadingimporttimeimportqueuedefproducer():count=1while1:q.put('No.%i'%count)print('ProducerputNo.%i'%count)time.sleep(1)count+=1defcustomer(name):whi......
  • 消息队列常见的问题
    消息队列的用途概要的说有三点解耦异步错峰,但使用了消息队列会导致系统可用性降低和复杂性的增加。常见的消息队列的特点1、吞吐量kafka和RocketMQ要比ActiveMQ和RabbitMQ高一个数量级。2、时效性RabbitMQ是基于erlang设计,并发能力很强,性能和延时都很优,达到......