Pagini recente » Cod sursa (job #2882007) | Cod sursa (job #346641) | Cod sursa (job #78996) | Cod sursa (job #2083951) | Cod sursa (job #1082897)
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
FILE *f,*g;
int a[501][501],m[501][501][8];
int maxim(int a, int b, int c, int d)
{
if(a>b && a>c && a>d) return a;
if(b>a && b>c && b>d) return b;
if(c>a && c>b && c>d) return c;
else return d;
}
int rmq(int a,int b,int k)
{
int h = log2(k);
int K = (k-(1<<h)+1);
return maxim( m[a][b][h] , m[a+K-1][b][h] , m[a][b+K-1][h] , m[a+K-1][b+K-1][h]);
}
int main()
{
f=fopen("plantatie.in","r");
g=fopen("plantatie.out","w");
int i,j,k,x,y,r,n,nr;
fscanf(f,"%d %d",&n,&nr);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
fscanf(f,"%d",&a[i][j]);
m[i][j][0]=a[i][j];
}
}
for(k=1;1<<k<=n;k++)
{
for(i=0;i+(1<<k)-1<n;i++)
{
for(j=0;j+(1<<k)-1<n;j++)
{
m[i][j][k] = maxim(m[i][j][k-1] , m[i][j+(1<<(k-1))][k-1] , m[i+(1<<(k-1))][j][k-1] , m[i+(1<<(k-1))][j+(1<<(k-1))][k-1]);
}
}
}
for(i=1;i<=nr;i++)
{
fscanf(f,"%d %d %d",&x,&y,&r);
fprintf(g,"%d\n",rmq(x-1,y-1,r));
}
fclose(f);
fclose(g);
return 0;
}