| ||||||||||
| 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 | |||||||||
Re:单调队列In Reply To:单调队列 Posted by:hntby at 2018-12-15 11:09:57 > #include <iostream>
> #include <cstdio>
> #include <cstdlib>
> #include <cstring>
> #include <string>
> #include <algorithm>
> #include <cmath>
> #define M 1000000
> using namespace std;
> int n,m,a[M+1];
>
> struct node{int pos,val;}q[M+1];
>
> void getmin()
> {
> int head=0,tail=-1;
> for (register int i=0;i<m-1;i++)
> {
> while (head<=tail&&q[tail].val>a[i]) tail--;
> q[++tail].val=a[i],q[tail].pos=i;
> }
> for (register int i=m-1;i<n;i++)
> {
> while (head<=tail&&i-q[head].pos>=m) head++;
> while (head<=tail&&q[tail].val>a[i]) tail--;
> q[++tail].val=a[i],q[tail].pos=i;
> printf("%d ",q[head].val);
> }
> printf("\n");
> }
>
> void getmax()
> {
> int head=0,tail=-1;
> for (register int i=0;i<m-1;i++)
> {
> while (head<=tail&&q[tail].val<a[i]) tail--;
> q[++tail].val=a[i],q[tail].pos=i;
> }
> for (register int i=m-1;i<n;i++)
> {
> while (head<=tail&&i-q[head].pos>=m) head++;
> while (head<=tail&&q[tail].val<a[i]) tail--;
> q[++tail].val=a[i],q[tail].pos=i;
> printf("%d ",q[head].val);
> }
> printf("\n");
> }
>
> int main()
> {
> scanf("%d%d",&n,&m);
> for (register int i=0;i<n;i++) scanf("%d",&a[i]);
> getmin(),getmax();
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator