Pagini recente » Cod sursa (job #929005) | Cod sursa (job #1232953) | Cod sursa (job #2793745) | Cod sursa (job #2264968) | Cod sursa (job #18488)
Cod sursa(job #18488)
/*
*
*
Info-Arena 2.0 - preONI 2007 - Runda 2 - Plantatie
*
*
*/
#include<stdio.h>
#include<math.h>
#define INPUT "plantatie.in"
#define OUTPUT "plantatie.out"
#define INFI -2000000000
FILE *fin=fopen(INPUT, "r"),*fout=fopen(OUTPUT, "w");
int n;
long m,a[501][501],b[501][501][3],val;
void citire();
long max(long x, long y);
long calcul(int x, int y, int z);
int main()
{
citire();
int linie, coloana, valoare;
long rez;
for(long i=1;i<=m;++i)
{
fscanf(fin, "%d %d %d", &linie, &coloana, &valoare);
rez=calcul(linie, coloana, valoare);
fprintf(fout, "%ld\n", rez);
}
fclose(fin);
fclose(fout);
return 0;
}
void citire()
{
fscanf(fin, "%d %ld", &n, &m);
val=sqrt(n);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
{
fscanf(fin, "%ld", &a[i][j]);
if(j%val==1 || j==1)
b[i][j][0]=a[i][j];
else
b[i][j][0]=max(b[i][j-1][0],a[i][j]);
if(i%val==1 || i==1)
b[i][j][1]=b[i][j][0];
else
b[i][j][1]=max(b[i-1][j][1],b[i][j][0]);
}
}
long max(long x, long y)
{
if(x>y)
return x;
return y;
}
long calcul(int x, int y, int z)
{
long maxim;
maxim=INFI;
for(int i=x;i<=x+z-1;++i)
for(int j=y;j<=y+z-1;)
{
while(j%val!=1)
{
maxim=max(maxim, b[i][j][0]);
++j;
}
while(j<=y+z-1)
if(j+val<=y+z-1)
{
maxim=max(maxim, b[i][j+val-1][0]);
j+=val;
}
else
{
maxim=max(maxim, b[i][y+z-1][0]);
j=y+z;
}
}
return maxim;
}