zoukankan      html  css  js  c++  java
  • [Poj #2019] Cornfields

    badge:标签-数据结构
    一维静态RMQ?st表。
    好的你变成了二维。
    没事,二维st表。

    #include<cstdio>
    using namespace std;
    const int LG=8;
    const int inf=0x7f7f7f7f;
    int n,m;
    int st1[256][256][LG][LG];
    int st2[256][256][LG][LG];
    int a[256][256];
    int maxf(int x,int y){return x>y?x:y;}
    int minf(int x,int y){return x<y?x:y;}
    int logn[256];
    void prepare()
    {
    	int i,j,k,_n,_m,h,l;
    	for(i=1;i<=n;i++)
    	for(j=1;j<=m;j++)
    	st1[i][j][0][0]=st2[i][j][0][0]=a[i][j];
    	logn[1]=0;
    	for(i=2;i<=255;i++)logn[i]=logn[i>>1]+1;
    	_n=logn[n];_m=logn[m];
    	for(h=0;h<=_n;h++)
    	{
    		for(l=0;l<=_m;l++)
    		{
    			if(!h&&!l)continue;
    			for(i=1;i<=n;i++)
    			{
    				for(j=1;j<=m;j++)
    				{
    					if(l)st1[i][j][h][l]=maxf(st1[i][j][h][l-1],st1[i][j+(1<<(l-1))][h][l-1]);
    					else st1[i][j][h][l]=maxf(st1[i][j][h-1][l],st1[i+(1<<(h-1))][j][h-1][l]);
    					if(l)st2[i][j][h][l]=minf(st2[i][j][h][l-1],st2[i][j+(1<<(l-1))][h][l-1]);
    					else st2[i][j][h][l]=minf(st2[i][j][h-1][l],st2[i+(1<<(h-1))][j][h-1][l]);
    				}
    			}
    		}
    	}
    	return;
    }
    int x2,y2,ans;
    int querymax(int x,int y,int h,int l)
    {
    	x2=x+h-1,y2=y+l-1;
    	h=logn[h];l=logn[l];ans=-inf;
    	ans=maxf(st1[x][y][h][l],st1[x][y2-(1<<l)+1][h][l]);
    	ans=maxf(ans,maxf(st1[x2-(1<<h)+1][y][h][l],st1[x2-(1<<h)+1][y2-(1<<l)+1][h][l]));
    	return ans;
    }
    int querymin(int x,int y,int h,int l)
    {
    	x2=x+h-1,y2=y+l-1;
    	h=logn[h];l=logn[l];ans=inf;
    	ans=minf(st2[x][y][h][l],st2[x][y2-(1<<l)+1][h][l]);
    	ans=minf(ans,minf(st2[x2-(1<<h)+1][y][h][l],st2[x2-(1<<h)+1][y2-(1<<l)+1][h][l]));
    	return ans;
    }
    int main()
    {
    	int i,j,k,x,y,z,q,b;
    	scanf("%d%d%d",&n,&b,&q);
    	m=n;
    	for(i=1;i<=n;i++)
    	{
    		for(j=1;j<=m;j++)
    		scanf("%d",&a[i][j]);
    	}
    	prepare();
    	for(i=1;i<=q;i++)
    	{
    		scanf("%d%d",&x,&y);
    		printf("%d
    ",querymax(x,y,b,b)-querymin(x,y,b,b));
    	}
    	return 0;
    }
    
  • 相关阅读:
    centos 7下安装mysql 5.7.21
    以多主模式优雅进行MGR复制搭建
    JMeter测试工具
    keepalived故障切换邮件通知
    vim常用快捷键
    mysql高可用之MHA--邮件报警
    Shell脚本实现批量下载资源并保留原始路径
    面试常考题 max pool实现
    Cpp 书籍推荐
    面试常考题 浅谈 赛马问题
  • 原文地址:https://www.cnblogs.com/Rain142857/p/11734010.html
Copyright © 2011-2022 走看看