标签:
题意 给你n个数,然后求连续m个数的最小值和最大值
然后维护一个单调递增序列和一个单调递减序列
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int last,head;
int n,m,k;
int a[1111111];
int que1[1111111];
int que2[1111111];
int ans1[1111111];
int ans2[1111111];
int main(){
scanf("%d%d",&n,&m);{
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
int l1=0;
int l2 = 0;
int ans = 0;
int l = 0;
int r1 = -1;
int r2 = -1;
int cunt =0;
for(int i=1;i<=n;i++){
while(l1<=r1&&a[que1[r1]]>a[i]) --r1;
while(l2<=r2&&a[que2[r2]]<a[i]) --r2;
que1[++r1] = i;
que2[++r2] = i;
if(i>=m){
while(que1[l1]<=i-m){l1++;}
while(que2[l2]<=i-m){l2++;}
ans1[++cunt] = a[que1[l1]];
ans2[cunt] = a[que2[l2]];
}
}
for(int i=1;i<cunt;i++){
printf("%d ",ans1[i]);
}
printf("%d\n",ans1[cunt]);
for(int i=1;i<cunt;i++){
printf("%d ",ans2[i]);
}
printf("%d\n",ans2[cunt]);
}
}版权声明:都是兄弟,请随意转载,请注明兄弟是谁
标签:
原文地址:http://blog.csdn.net/u013076044/article/details/46930777