Cod sursa(job #1688931)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 13 aprilie 2016 20:07:20
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream in("plantatie.in");
ofstream out("plantatie.out");
const int NMAX = 501;
int n,m;
int rmq[NMAX][NMAX][9];
int lg[NMAX];

int main()
{
    in>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        in>>rmq[i][j][0];
    for(int i=2;i<=n;i++)
        lg[i] = lg[i/2] + 1;
    for(int k=1;(1<<k)<=n;k++)
        for(int i=1;i+(1<<k)-1<=n;i++)
            for(int j=1;j+(1<<k)-1<=n;j++)
                rmq[i][j][k] = max(max(rmq[i][j][k-1],rmq[i+(1<<(k-1))][j][k-1]),
            max(rmq[i][j+(1<<(k-1))][k-1],rmq[i+(1<<(k-1))][j+(1<<(k-1))][k-1]));
    int x,y,z,p;
    for(int i=1;i<=m;i++)
    {
        in>>x>>y>>z;
        p = lg[z];
        out<<max(max(rmq[x][y][p],rmq[x+z-(1<<p)][y][p]),
        max(rmq[x][y+z-(1<<p)][p],rmq[x+z-(1<<p)][y+z-(1<<p)][p]))<<"\n";
    }
    in.close();
    out.close();
    return 0;
}