Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- #define REP(i,x) for(int i=0;i<(int)(x);i++)
- #define REPS(i,x) for(int i=1;i<=(int)(x);i++)
- #define REPO(i,x) for(int i=x-1;i>=0;i--)
- #define ull unsigned long long int
- #define pii pair<int, int>
- #define FOR(i,a,b) for(int i=a;i<=b;i++)
- #define ROF(i,a,b) for(int i=a;i>=b;i--)
- #define pll pair<long long int, long long int>
- #define T int tc; cin>>tc;while(tc--)
- #define READ freopen("input.txt","r", stdin)
- #define WRITE(x) freopen (x,"w",stdout)
- #define SORT(v) sort(v.begin(),v.end())
- #define REV(v) reverse(v.begin(),v.end())
- #define mem(a,b) memset(a, b, sizeof(a))
- #define lcm(a, b) ((a / __gcd(a, b) ) * b)
- #define scanI(a) scanf("%d",&a)
- #define scanI2(a,b) scanI(a) , scanI(b)
- #define pf(a) printf("%d\n", a);
- #define pfl(a) printf("%lld\n", a);
- #define PI 2*acos(0.0)
- #define pb push_back
- #define eb emplace_back
- #define ll long long
- #define MAX 100005
- #define inf 1e15
- #define MOD -1000000000
- #define n0 cout<<"\n"
- #define base 31
- //ull has[1000001];
- //ull has1[1000001],po[1000001];
- //ull gethas(int L, int R)
- //{return (has[R] - (has[L - 1] * po[R - L + 1]));}
- /*bool sortby(const pair<int,int> &a, const pair<int,int> &b)
- {
- if(a.first==b.first) return a.second>b.second;
- else return a.first>b.first;
- }*/
- map<int,pair<int,int> >m;
- int dx[4]= {0,0,1,-1};
- int dy[4]= {1,-1,0,0};
- int dp[501][501];
- int main()
- {
- int n;
- cin>>n;
- memset(dp,0,sizeof(dp));
- queue<int>st;
- vector<int>vis(n+1,0);
- int ar[n][n]= {0};
- REP(i,n)
- {
- cin>>dp[i][i];
- st.push(dp[i][i]);
- m[dp[i][i]]= {i,i};
- vis[i+1]=i;
- ar[i][i]=1;
- }
- while(!st.empty())
- {
- int p=st.front();
- if(vis[p]==0)
- {
- st.pop();
- continue;
- }
- int px=m[p].first,px1=m[p].second;
- int mm=1,mm1=1;
- int tot=0;
- REP(k,4)
- {
- int x=px+dx[k],y=px1+dy[k];
- if(x>=0 && x<n && y>=0 && y<=x && !ar[x][y])
- {
- mm=x;
- mm1=y;
- tot++;
- }
- }
- if(tot==1)
- {
- dp[mm][mm1]=dp[px][px1];
- m[p]= {mm,mm1};
- ar[mm][mm1]=1;
- vis[p]--;
- continue;
- }
- st.pop();
- st.push(p);
- }
- REP(i,n)
- {
- REP(j,n)
- {
- if(j>i) break;
- cout<<dp[i][j]<<" ";
- }
- n0;
- }
- }
Add Comment
Please, Sign In to add comment