树状数组 RE 求助
查看原帖
树状数组 RE 求助
556362
Unnamed114514楼主2022/2/20 16:25
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int T,n,a[maxn];
struct Tree_Array {
#define lowbit(x) x & -x
    int c[maxn];
    inline void init() { for (int i = 1; i <= n; i += lowbit(i)) c[i] = 0; }
    inline int add(int x, int y) {
        for (; x <= n; x += lowbit(x)) c[x] += y;
    }
    inline int ask(int x) {
        int ans = 0;
        for (; x; x -= lowbit(x)) ans += c[x];
        return ans;
    }
};
Tree_Array x;
int main(){
	scanf("%d",&T);
	while(T--){
		x.init();
		scanf("%d",&n);
		for(int i=1;i<=n;++i)
			scanf("%d",&a[i]);
		int s=0;
		for(int i=n;i;--i){
			x.add(a[i],1);
			s+=x.ask(a[i]-1);
		}
		printf("Optimal train swapping takes %d swaps.\n",s);
	}
	return 0;
}
2022/2/20 16:25
加载中...