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;
    }
    
  • 相关阅读:
    SQL having 子句
    sqlserver2008 R2 创建作业(定时任务)
    3步完成chrome切换搜索引擎
    http模拟请求工具
    网页自动加载进度条插件
    span设为inline-block之后,未包含文字时下面会多出一条空白问题
    记一次特殊的下载字体方法
    团队冲刺第十三天
    团队冲刺第十二天
    人月神话03
  • 原文地址:https://www.cnblogs.com/Rain142857/p/11734010.html
Copyright © 2011-2022 走看看