zoukankan      html  css  js  c++  java
  • 洛谷 1886 滑动窗口

    【题解】

      线段树或者单调队列都可以。

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 #define LL long long
     5 #define rg register
     6 #define N 1000010
     7 #define ls (u<<1)
     8 #define rs (u<<1|1)
     9 #define mid ((a[u].l+a[u].r)>>1) 
    10 using namespace std;
    11 int n,m;
    12 struct tree{
    13     int l,r,mx,mn;
    14 }a[N<<2];
    15 inline int read(){
    16     int k=0,f=1; char c=getchar();
    17     while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
    18     while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
    19     return k*f;
    20 }
    21 void build(int u,int l,int r){
    22     a[u].l=l; a[u].r=r;
    23     if(l<r){
    24         build(ls,l,mid),build(rs,mid+1,r);
    25         a[u].mx=max(a[ls].mx,a[rs].mx);
    26         a[u].mn=min(a[ls].mn,a[rs].mn);
    27     }
    28     else a[u].mx=a[u].mn=read(); 
    29 }
    30 int query(int u,int l,int r,int type){
    31     if(l<=a[u].l&&a[u].r<=r) return type?a[u].mx:a[u].mn;
    32     if(type){
    33         int ret=-1e9;
    34         if(l<=mid) ret=max(ret,query(ls,l,r,type));
    35         if(r>mid) ret=max(ret,query(rs,l,r,type));
    36         return ret;
    37     }
    38     else{
    39         int ret=1e9;
    40         if(l<=mid) ret=min(ret,query(ls,l,r,type));
    41         if(r>mid) ret=min(ret,query(rs,l,r,type));
    42         return ret;
    43     }
    44 }
    45 int main(){
    46     n=read(); m=read(); build(1,1,n);
    47     for(rg int i=1;i<=n-m+1;i++) printf("%d ",query(1,i,i+m-1,0));//min
    48     puts("");
    49     for(rg int i=1;i<=n-m+1;i++) printf("%d ",query(1,i,i+m-1,1));//max
    50     return 0;
    51 }
    View Code
  • 相关阅读:
    -_-#【缓存】Content-Type 错误
    ♫【事件】事件处理程序
    -_-#【Node】Express 400 Error: ENOENT, open
    【JS】定位
    【JS】壹零零壹
    洛谷—— P1018 乘积最大
    洛谷—— P1017 进制转换
    洛谷——P1011 车站
    洛谷——P2241 统计方形(数据加强版)
    洛谷——P1548 棋盘问题
  • 原文地址:https://www.cnblogs.com/DriverLao/p/9397590.html
Copyright © 2011-2022 走看看