POj 2823
来源:互联网 发布:sacdiso mac播放 编辑:程序博客网 时间:2024/06/08 06:04
比较好用的就是单调队列了,时间复杂度为O(N),这样做出来的时间是5500ms左右,算是POj上该题的平均时间。
代码如下:
// POJ 2823//2012-8-6//wxping#define Max 1000000#include <stdio.h>#include <fstream>typedef struct{ int date,pos;}Queue;Queue qumax[Max],qumin[Max];int maxx[Max],minn[Max],a[Max],n,k;void solve(){ int i1=0,i2=0,j=0,a,front1=0,rear1=0,pushc1=0,posc1=0,front2=0,rear2=0,pushc2=0,posc2=0; for(j=0;j<k;j++) { scanf("%d",&a); while(front1<rear1 && qumax[rear1-1].date<a) rear1--; qumax[rear1].date=a; qumax[rear1].pos=pushc1; rear1++;pushc1++; while(front2<rear2 && qumin[rear2-1].date>a) rear2--; qumin[rear2].date=a; qumin[rear2].pos=pushc2; rear2++;pushc2++; } maxx[i1++]=qumax[front1].date; minn[i2++]=qumin[front2].date; for(j;j<n;j++) { scanf("%d",&a); if(qumax[front1].pos==posc1) front1++; posc1++; while(front1<rear1 && qumax[rear1-1].date<a) rear1--; qumax[rear1].date=a; qumax[rear1].pos=pushc1; rear1++;pushc1++; maxx[i1++]=qumax[front1].date; if(qumin[front2].pos==posc2) front2++; posc2++; while(front2<rear2 && qumin[rear2-1].date>a) rear2--; qumin[rear2].date=a; qumin[rear2].pos=pushc2; rear2++;pushc2++; minn[i2++]=qumin[front2].date; } for(j=0;j<i2;j++) if(j==0) printf("%d",minn[j]); else printf(" %d",minn[j]); printf("\n"); for(j=0;j<i1;j++) if(j==0) printf("%d",maxx[j]); else printf(" %d",maxx[j]); printf("\n");}int main(){ //freopen("2.txt","r",stdin); scanf("%d %d",&n,&k); solve(); return 0;}
- poj 2823
- POJ 2823
- poj 2823
- POJ 2823
- poj 2823
- POj 2823
- POJ 2823
- POJ 2823
- poj-2823
- POJ 2823
- poj 2823
- poj 2823
- poj 2823
- 【POJ】2823
- POJ 2823 Sliding Window
- poj 2823 Sliding Window
- Poj 2823 (单调队列)
- poj 2823【单调队列】
- 初学者快速理解UINavigationController结构
- POJ 1328
- c#汉字转化为拼音
- void main()还是int main()
- C /C++计算程序运行时间
- POj 2823
- HEVC中CU分割示例
- java poi ppt操作示例
- js加载XML
- 寻找第K大的数的方法总结
- 那些年,我们一起做过的贪心
- hdu 3685 Rotational Painting
- 分享下多年积累的对JAVA程序员成长之路的总结
- HttpClient, 使用C#操作Web