| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
单调队列,,,,5秒多啊。。。贴一下代码#include <stdio.h>
#include <algorithm>
int max[1000000],min[1000000];//1000000
int a[1000010];//1000010
int que[1000100]={0};//1000100
inline void minnum(int n,int k)
{
int front=0,rear=0;
int j=0,l=0;
que[rear++]=j++;
while(j<k)
{
if(a[que[rear-1]]<a[j])
que[rear++]=j;
else
{
while(a[j]<=a[que[rear-1]] && front<rear)//如果有个值比最前面的数大,但比它前面数小
rear--;
if(a[que[front]]>=a[j] && rear-front==1)//如果值比最前面的数小
rear--;
que[rear++]=j;
}
j++;
}
min[l++]=a[que[front]];
if(j-que[front]>=k)
front++;
while(j<n)
{
//如果数组的值大于队列的值,则放入队列
//否则这个数前面的值都出队列,再将其放入队列
//如果队列第一个值已经出了k的范围,则出队列
if(a[que[rear-1]]<a[j])
que[rear++]=j;
else
{
while(a[que[rear-1]]>=a[j] && front<rear)//如果有个值比最前面的数大,但比它前面数小
rear--;
if(a[que[rear-1]]>=a[j] && rear-front==1)//如果这个值比最前面的数小
rear--;
que[rear++]=j;
}
min[l++]=a[que[front]];
j++;
if(j-que[front]>=k)
front++;
}
}
inline void maxnum(int n,int k)
{
int j=0,front=0,rear=0,l=0;
que[rear++]=j++;
while(j<k)
{
if(a[que[rear-1]]>a[j])
que[rear++]=j;
else
{
while(a[j]>=a[que[rear-1]] && front<rear)//如果有个值比最前面的数小,但比它前面数大
rear--;
if(a[que[front]]<=a[j] && rear-front==1)//如果这个值还比最前面的大
rear--;
que[rear++]=j;
}
j++;
}
max[l++]=a[que[front]];
if(j-que[front]>=k)
front++;
while(j<n)
{
if(a[que[rear-1]]>a[j])
que[rear++]=j;
else
{
while(a[que[rear-1]]<=a[j] && front<rear)//如果有个值比最前面的数小,但比它前面数大
rear--;
if(a[que[rear-1]]<=a[j] && front-rear==1)//如果这个值比最前面的数大
rear--;
que[rear++]=j;
}
max[l++]=a[que[front]];
j++;
if(j-que[front]>=k)
front++;
}
}
int main()
{
int m,n;
scanf("%d%d",&m,&n);
int i;
for(i=0;i<m;i++)
scanf("%d",&a[i]);
minnum(m,n);
maxnum(m,n);
for(i=0;i<m-n;i++)
printf("%d ",min[i]);
printf("%d\n",min[m-n]);
for(i=0;i<m-n;i++)
printf("%d ",max[i]);
printf("%d",max[m-n]);
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator