zoukankan      html  css  js  c++  java
  • POJ 2823

    单调队列来做,简单题了。维护一个最大的,一个最小的即可。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    
    using namespace std;
    
    #define N 1001000
    
    int num[N];
    int bigque[N],bhead,btail;
    int smalque[N],shead,stail;
    int ansb[N],anss[N],bt,st;
    
    void addbig(int v){
    	while(bhead<btail){
    		if(v>bigque[btail-1])
    		btail--;
    		else break;
    	}
    	bigque[btail++]=v;
    }
    
    void addsmall(int v){
    	while(shead<stail){
    		if(v<smalque[stail-1])
    		stail--;
    		else break;
    	}
    	smalque[stail++]=v;
    }
    
    int main(){
    	int n,k;
    	while(scanf("%d%d",&n,&k)!=EOF){
    		bhead=btail=shead=stail=bt=st=0;
    		for(int i=1;i<=n;i++)
    		scanf("%d",&num[i]);
    		int i;
    		for(i=1;i<=k&&i<=n;i++){
    			addbig(num[i]);
    			addsmall(num[i]);
    		//	cout<<"YES"<<endl;
    		}
    		if(k>=n){
    			printf("%d
    ",ansb[bt]);
    			printf("%d
    ",anss[st]);
    		}
    		else{
    			ansb[bt++]=bigque[bhead];
    			anss[st++]=smalque[shead];
    			for(;i<=n;i++){
    				if(bigque[bhead]==num[i-k]){
    					bhead++;
    				}
    				addbig(num[i]);
    				if(smalque[shead]==num[i-k])
    				shead++;
    				addsmall(num[i]);
    				ansb[bt++]=bigque[bhead];
    				anss[st++]=smalque[shead];
    			}
    			printf("%d",anss[0]);
    			for(int i=1;i<st;i++)
    			printf(" %d",anss[i]);
    			printf("
    ");
    			printf("%d",ansb[0]);
    			for(int i=1;i<bt;i++)
    			printf(" %d",ansb[i]);
    			printf("
    ");
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    datagrid
    IntelliJ IDEA for mac 引入js注意事项
    centos7安装并配置svn
    yum使用总结
    安装php
    类视图
    django里面添加静态变量
    Ubuntu16.04安装&创建虚拟环境
    制作dockerfile, 天眼查的镜像、并运行
    dockerfile
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/4148456.html
Copyright © 2011-2022 走看看