zoukankan      html  css  js  c++  java
  • hdu1506+ luogu 1440 单调栈/单调队列裸题

    就是简单的记录一下代码,前几天写后缀数组+单调栈/单调队列写的有点傻....

    首先是hdu1506单调栈:

    #include<bits/stdc++.h>
    #define ll long long
    #define rep(ii,a,b) for(int ii=a;ii<=b;++ii)
    #define per(ii,a,b) for(int ii=b;ii>=a;--ii)
    using namespace std;//head
    const int maxn=1e6+10,maxm=2e6+10;
    int casn,n,m,k;
    ll a[maxn];
    stack<int> stk;
    int l[maxn],r[maxn];
    int main() {
      while(cin>>n){
        if(n==0) break;
        rep(i,1,n) cin>>a[i];
        ll ans=a[1];
        while(!stk.empty()) stk.pop();
        rep(i,1,n){
          while(!stk.empty()&&a[stk.top()]>=a[i]) stk.pop();
          if(!stk.empty()) l[i]=stk.top()+1;
          else l[i]=1;
          stk.push(i);
        }
        while(!stk.empty()) stk.pop();
        per(i,1,n){
          while(!stk.empty()&&a[stk.top()]>=a[i]) stk.pop();
          if(!stk.empty()) r[i]=stk.top()-1;
          else r[i]=n;
          stk.push(i);
        }
        rep(i,1,n) {
          ans=max(ans,a[i]*(r[i]-l[i]+1));
        }
        cout<<ans<<endl;
      }
      return 0;
    }
    

     然后是p1440

    #include<bits/stdc++.h>
    #define rep(ii,a,b) for(int ii=a;ii<=b;++ii)
    using namespace std;//head
    const int maxn=1e7+10,maxm=2e6+10;
    int casn,n,m,k;
    int a[maxn],ans[maxn];
    int main() {
      deque<int> q;
      cin>>n>>m;
      rep(i,1,n) cin>>a[i];
      rep(i,1,n){
        if(q.empty()) ans[i]=0;
        else ans[i]=a[q.front()];
        if(!q.empty()&&i-q.front()+1>m) q.pop_front();
        while(!q.empty()&&a[i]<a[q.back()]) q.pop_back();
        q.push_back(i);
      }
      rep(i,1,n) cout<<ans[i]<<'
    ';
      return 0;
    }
    
  • 相关阅读:
    markdown语法
    GIT基本操作
    函数rest参数和扩展
    axios基础介绍
    Vue-Resource的使用
    Vue-router的介绍
    Vue2.0+组件库总结
    Vue 项目de一些准备工作
    VUE.js入门学习(5)- 插槽和作用域插槽
    VUE.js入门学习(4)-动画特效
  • 原文地址:https://www.cnblogs.com/nervendnig/p/11437734.html
Copyright © 2011-2022 走看看