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 |
贴一份简洁的单调队列模板,因为用stl写的,所以比较慢~但很简洁~#include <cstdio> #include <deque> using namespace std; const int maxN=1000005,inf=0x3f3f3f3f; int a[maxN],n,k; deque<int> ma,mi; void getmax() { a[0]=-inf; ma.push_back(0); for (int i = 1; i <= n; i++) { if (a[i]<=a[ma.back()]) ma.push_back(i); else {do{ma.pop_back();}while (!ma.empty()&&a[ma.back()]<a[i]);ma.push_back(i);} if (i-ma.front()+1>k) ma.pop_front(); if (i>=k) { printf("%d",a[ma.front()]); if (i<n) putchar(' '); } } puts(""); } void getmin() { a[0]=inf; mi.push_back(0); for (int i = 1; i <= n; i++) { if (a[i]>=a[mi.back()]) mi.push_back(i); else {do{mi.pop_back();}while (!mi.empty()&&a[mi.back()]>a[i]);mi.push_back(i);} if (i-mi.front()+1>k) mi.pop_front(); if (i>=k) { printf("%d",a[mi.front()]); if (i<n) putchar(' '); } } puts(""); } void read() { scanf("%d%d",&n,&k); for (int i = 1; i <= n; i++) scanf("%d",&a[i]); } int main() { // freopen("D:\\input.txt","r",stdin); read(); getmin(); getmax(); return 0; }//poj Accepted 7196K 10016MS Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator