悬棺
查看原帖
悬棺
636409
Headofstate1945楼主2024/11/20 08:37
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e5+5;
int s[N],p[N],tr[N*4];
int s1[N],p1[N];
void pushup(int u){
	tr[u]=tr[u*2]+tr[u*2+1];
}
void modify(int u,int l,int r,int x){
	if(l==r){
		tr[u]++;
		return;
	}
	int mid=(l+r)>>1;
	if(x<=mid)
		modify(u*2,l,mid,x);
	else 
		modify(u*2+1,mid+1,r,x);
	pushup(u);
}
int query(int u,int l,int r,int a,int b){
	if(a<=l&&r<=b){
		return tr[u];
	}
	int ans=0;
	int mid=(l+r)>>1;
	if(a<=mid)ans+=query(u*2,l,mid,a,b);
	if(mid<b)ans+=query(u*2+1,mid+1,r,a,b);
	return ans;
}
signed main(){
	ios::sync_with_stdio(0);
	int n;
	while(cin>>n){
		int cnt=0;
		for(int i=1;i<=n*n;i++){
			cin>>s[i];
			p[i]=s[i];
		}
		sort(p+1,p+1+n*n);
		for(int i=1;i<=n*n;i++){
			int x=lower_bound(p+1,p+1+n*n,s[i])-p;
			cnt+=query(1,1,n*n,x+1,n*n);	
			modify(1,1,n*n,x);
		}
		int cnt1=0;
		for(int i=1;i<=n*n;i++){
			cin>>s1[i];
			p1[i]=s1[i];
		}
		sort(p1+1,p1+1+n);
		for(int i=1;i<=n*n;i++){
			int x=lower_bound(p1+1,p1+1+n*n,s1[i])-p1;
			cnt1+=query(1,1,n*n,x+1,n*n);	
			modify(1,1,n*n,x);
		}
		if((cnt&1)==(cnt1&1))puts("TAK");
		else puts("NIE");
	}
	
	return 0;
}
2024/11/20 08:37
加载中...