Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ///O((n*m*n)
- ///parcurgerea crescatoare a valorilor,
- ///eliminarea elementelor vizitate
- ///si comparare doar cu ultimul element din linie
- #include <fstream>
- using namespace std;
- ifstream fin("traseu.in");
- ofstream fout("traseu.out");
- struct pozitie{
- short l,c;
- };
- int main(){
- int n,m;
- fin>>n>>m;
- pozitie f[n*m+5];
- short pleft[n+5][m+5],pright[n+5][m+5];
- int a[n+5][m+5],d,dm,i,j,i1,i2,j1,j2;
- for(i=1;i<=n;i++){
- pright[i][0]=1;
- for(j=1;j<=m;j++){
- fin>>a[i][j];
- pleft[i][j]=j-1;
- pright[i][j]=j+1;
- f[a[i][j]]={i,j};
- }
- pleft[i][m+1]=m;
- }
- dm=0;
- for(i=1;i<=n*m;i++){
- i1=f[i].l; j1=f[i].c;
- pleft[i1][pright[i1][j1]]=pleft[i1][j1];
- pright[i1][pleft[i1][j1]]=pright[i1][j1];
- for(i2=i1;i2<=n;i2++){
- j2=pleft[i2][m+1];
- if(j1<=j2){
- dm=max(dm,i2-i1+j2-j1);
- }
- }
- }
- if(dm==0)fout<<0;
- else fout<<dm+1;
- fout.close(); fin.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement