zoukankan      html  css  js  c++  java
  • [題解](單調隊列/水)luogu_P3088擠奶牛

    d長度內區間最大值,單調隊列維護即可

    由於需要滿足左右同時有2倍高度的牛才能更新答案,所以正反跑兩次

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=50010;
    int n,d,ans;
    struct node{
        int x,h;
    }a[maxn];
    int q[maxn],head=1,tail=0;
    bool f[maxn];
    bool cmp(node a,node b){
        return a.x<b.x;
    }
    int main()
    {
        scanf("%d%d",&n,&d);
        for(int i=1;i<=n;i++)scanf("%d%d",&a[i].x,&a[i].h);
        sort(a+1,a+1+n,cmp);
        for(int i=1;i<=n;i++){
            while(head<=tail && a[i].x-a[q[head]].x>d)head++;
            while(head<=tail && a[q[tail]].h<=a[i].h)tail--;
            q[++tail]=i;
            if(a[q[head]].h>=a[i].h*2)f[i]=1;
        }
        head=1,tail=0;
        for(int i=n;i>=1;i--){
            while(head<=tail && a[q[head]].x-a[i].x>d)head++;
            while(head<=tail && a[q[tail]].h<=a[i].h)tail--;
            q[++tail]=i;
            if(a[q[head]].h>=a[i].h*2 && f[i])ans++;
        }
        printf("%d",ans);
    }
  • 相关阅读:
    svn命令
    Lambda 表达式
    JAVA 探究NIO
    JAVA I/O系统
    MySQL 锁
    spring boot 集成 zookeeper 搭建微服务架构
    架构演化
    JAVA 集合
    spring boot 发送邮件
    MySQL 隔离级别
  • 原文地址:https://www.cnblogs.com/superminivan/p/10758225.html
Copyright © 2011-2022 走看看