Cod sursa(job #177842)

Utilizator me_andyAvramescu Andrei me_andy Data 13 aprilie 2008 17:50:15
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<fstream>

#define Nmax 501
int maxi(int a,int b,int c,int d)
{
 int x,y;
 if(a>b)
 x=a;
 else x=b;
 if(c>d)
   y=c;
   else y=d;
 if(x>y)
 return x;
 else return y;
}
using namespace std;
 ifstream f("plantatie.in");
 ofstream g("plantatie.out");
 int rmq[18][Nmax][Nmax],lg[Nmax],x,y,i,j,k,a,b,k1;

int main()
{
 f>>x;
 f>>y;
 for(i=1;i<=x;i++)
 for(j=1;j<=x;j++)
   f>>rmq[0][i][j];
  for(i=2;i<=x;i++)
  lg[i]=lg[i/2]+1;

 for(k=1;k<=lg[x];k++)
 for(i=1;i+(1<<k)-1<=x;i++)
  for(j=1;j+(1<<k)-1<=x;j++)
     rmq[k][i][j]=maxi(rmq[k-1][i][j],rmq[k-1][i][j+(1<<(k-1))],rmq[k-1][i+(1<<(k-1))][j],rmq[k-1][i+(1<<(k-1))][j+(1<<(k-1))]);

 for(i=1;i<=y;i++)
 {
  f>>a>>b>>k;
  k1=lg[k];
  g<<maxi(rmq[k1][a][b],rmq[k1][a+k-(1<<k1)][b],rmq[k1][a][b+k-(1<<k1)],rmq[k1][a+k-(1<<k1)][b+k-(1<<k1)])<<"\n";
 }
return 0;
}