You are on page 1of 2

void solve()

{
ll t,n;

cin>>t;

while(t--)
{
cin>>n;
vi a(n+5);
vi pos(n+5);

FOR(i,0,n)
{
cin>>a[i];
a[i]--;
pos[a[i]] = i;
}

FOR(i,0,n-2)
{
if(pos[i]==i) continue;

if((pos[i]-i)%2==0)
{
RFOR(j,pos[i],i)
{
pos[a[j]]++;
a[j+1] = a[j];
}
}
else
{
RFOR(j,pos[i],i+1)
{
pos[a[j]]++;
a[j+1] = a[j];
}
pos[a[i+2]] = i+1;
a[i+1] = a[i+2];
pos[a[i]] = i+2;
a[i+2] = a[i];
}

pos[i] = i;
a[i] = i;
}

if(a[n-2]<a[n-1]) cout<<"YES";
else cout<<"NO";
cout<<endl;
}

void solve()
{
ll m,n,r,ar;
cin>>m>>n>>ar;

ll p,d,ind;

ll max_ind = min(m/2,n/2);

vector<vector<pii> > v(max_ind+5);

FOR(i,0,m)
FOR(j,0,n)
{
cin>>p;
ind = min(min(i,j),min(m-1-i,n-1-j));
if(i==ind || j==n-1-ind) d = abs(ind-i)+abs(ind-j);
else d = 2*(m+n-2-4*ind) - (abs(ind-i)+abs(ind-j));
v[ind].pb(mp(d,p));
max_ind = max(ind,max_ind);
}

FOR(i,0,max_ind+1) sort(all(v[i]));

FOR(i,0,m)
{
FOR(j,0,n)
{
ind = min(min(i,j),min(m-1-i,n-1-j));
if(i==ind || j==n-1-ind) d = abs(ind-i)+abs(ind-j);
else d = 2*(m+n-2-4*ind) - (abs(ind-i)+abs(ind-j));
r = (ar%(2*(m+n-2-4*ind)));
d = (d+r)%(2*(m+n-2-4*ind));
cout<<v[ind][d].second<<" ";
}

cout<<endl;
}

int main()
{
solve();
return 0;
}

You might also like