Cod sursa(job #3242838)

Utilizator heheboi6Budiul Alexandru Vasile heheboi6 Data 14 septembrie 2024 11:29:23
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int lg[501],rmq[18][501][501];
int mx(int a, int b, int c, int d){
    if(a>b&&a>c&&a>d){
        return a;
    }
    else if(b>c&&b>d){
        return b;
    }
    else if(c>d){
        return c;
    }
    else{
        return d;
    }
}
int main()
{
    int i,n,q,j,l,k;
    f >> n >> q;
    lg[1]=0;
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            f >> rmq[0][i][j];
        }
        if(i>=2){
            lg[i]=lg[i/2]+1;
        }
    }
    for(k=1;(1<<k)<=n;k++){
        for(i=1;i<=n-(1<<k)+1;i++){
            for(j=1;j<=n-(1<<k)+1;j++){
                rmq[k][i][j]=mx(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(k=1;k<=q;k++){
        f >> i >> j >> l;
        g << mx(rmq[lg[l]][i][j],rmq[lg[l]][i+l-(1<<lg[l])][j],rmq[lg[l]][i][j+l-(1<<lg[l])],rmq[lg[l]][i+l-(1<<lg[l])][j+l-(1<<lg[l])]) << '\n';
        //g << rmq[lg[l]][i][j] << " " << rmq[lg[l]][i+l-(1<<lg[l])][j] << " " << rmq[lg[l]][i][j+l-(1<<lg[l])] << " " << rmq[lg[l]][i+l-(1<<lg[l])][j+l-(1<<lg[l])] << '\n';
    }
    return 0;
}