Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<algorithm>
- #include<stack>
- using namespace std;
- struct elem{
- int val;
- int I,J;
- };
- bool mycmp(elem a,elem b){
- return a.val < b.val;
- }
- int main()
- {
- int n,m;
- scanf("%d %d",&n,&m);
- int table[n][m];
- bool visited[n][m];
- elem order[n*m];
- int idx = 0;
- for(int i = 0 ; i < n ; i ++){
- for(int j = 0 ; j < m ; j ++){
- scanf("%d",&table[i][j]);
- visited[i][j] = false;
- order[idx++] = {table[i][j],i,j};
- }
- }
- sort(order,order+(n*m),mycmp);
- int ans = 0;
- for(int i = 0 ; i < idx ; i ++){
- int val = order[i].val;
- int I = order[i].I;
- int J = order[i].J;
- if(visited[I][J])continue;
- stack<elem> st;
- st.push({table[I][J],I,J});
- int cnt = 0;
- int moveI[4] = {-1,0,1,0};
- int moveJ[4] = {0,1,0,-1};
- // printf("Start (%d,%d) \n ",i,j);
- while(!st.empty()){
- int uv = st.top().val;
- int ui = st.top().I;
- int uj = st.top().J;
- // printf("Go to (%d,%d) : %d \n",ui,uj,uv);
- if(visited[ui][uj])continue;
- visited[ui][uj] = true;
- st.pop();
- cnt ++;
- for(int k = 0 ; k < 4 ; k ++){
- int vi = ui + moveI[k];
- int vj = uj + moveJ[k];
- if(0 <= vi && vi < n && 0 <= vj && vj < m && table[vi][vj] - table[ui][uj] == 1){
- st.push({table[vi][vj],vi,vj});
- }
- }
- }
- if(cnt > ans)ans = cnt;
- }
- printf("%d",ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement