BZOJ 1047
来源:互联网 发布:在线音乐识别软件 编辑:程序博客网 时间:2024/05/17 22:30
二维单调队列
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#define maxn 1010using namespace std;int n,m,r,mx[maxn][maxn],mn[maxn][maxn],ma[maxn][maxn];struct queue{int ql,qr,q[maxn][2],lim,f;queue(){ql=qr=0;}queue(int f):f(f){ql=qr=0;}void push(int pos,int cnt){//printf("<%d,%d>",q[q])while(ql<qr&&(f?q[qr-1][0]<=cnt:q[qr-1][0]>=cnt))qr--;//printf("[%d,%d]\n",ql,qr);q[qr][0]=cnt;q[qr++][1]=pos;}int pop(){while(ql<qr&&q[qr-1][1]-q[ql][1]+1>lim)ql++;return q[ql][0];}int size(){return q[qr-1][1]-q[ql][1]+1;}void clear(){ ql=qr=0; }}mxq(1),mnq(0);int main(){scanf("%d%d%d",&n,&m,&r);for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)scanf("%d",&ma[i][j]);mxq.lim=mnq.lim=r;for(int i=1;i<=n;++i){mxq.clear();mnq.clear();for(int j=1;j<=m;++j){mxq.push(j,ma[i][j]);mnq.push(j,ma[i][j]);mx[i][j]=mxq.pop();mn[i][j]=mnq.pop();//printf("%d ",mx[i][j]);}//putchar(10);}int ans=1<<30;for(int j=r;j<=m;++j){mxq.clear();mnq.clear();for(int i=1;i<=n;++i){mxq.push(i,mx[i][j]);mnq.push(i,mn[i][j]);if(i>=r)ans=min(ans,mxq.pop()-mnq.pop());}}printf("%d",ans);}
0 0
- bzoj 1047
- BZOJ 1047
- bzoj 1047 题解
- BZOJ 1047 单调队列
- bzoj 1047 单调队列
- [BZOJ ]
- BZOJ****-****
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- bzoj
- 数据库水平切分法
- RapidJSON 代码剖析(二):使用 SSE4.2 优化字符串扫描
- url中参数加密
- Android内部存储外部存储进行数据缓存等工具类
- spring-data-redis中的序列化/反序列化
- BZOJ 1047
- c++笔记(1):常量指针和指针常量
- dpdk中文-mbuf的基本操作
- iOS 开发 Provisioning Profile(描述文件) 详解
- 生活中对JQery的总结 随手记
- HTML5入门软硬件技术基础
- 将构建变量插入清单
- 理解SQL(1,2,3)
- maven Spring 4.2+SpringMVC+dubbo解决TypeProxyInvocationHandler.invoke(SerializableTypeWrapper.java:239