Meaning of the questions: Given M * N digital map, asked if he could move to the final state
analysis
Solving a condition seen eight digital solvability condition
It is worth mentioning that this question seeking to reverse the card Fenwick tree, with only merge sort.
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn = 1e6 + 10; int n,m,pos,x,ans,zero; int seq[maxn],tmp[maxn]; void msort(int l,int r) //对seq进行排序 { if(l==r) return ; int mid=(l+r)>>1; msort(l,mid); msort(mid+1,r); int i=l,j=mid+1,k=l-1; while(i<=mid&&j<=r) { if(seq[i]<=seq[j]) tmp[++k]=seq[i],i++; else tmp[++k]=seq[j],j++,ans+=mid-i+1; //ans就是逆序对个数 } while(i<=mid) tmp[++k]=seq[i],i++; while(j<=r) tmp[++k]=seq[j],j++; for(int qwq=l;qwq<=r;qwq++) seq[qwq]=tmp[qwq]; } int main() { while(scanf("%d%d",&n,&m)==2 && m) { for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { scanf("%d",&x); if(x) seq[++pos]=x; else zero=n-i; } msort(1,pos); if(m&1) zero=0; if((ans+zero)%2==0) printf("YES\n"); else printf("NO\n"); ans=0;pos=0;zero=0; } return 0; }
Reference Links: https://www.cnblogs.com/nopartyfoucaodong/p/9673434.html