社区讨论

后面一半WA求条

P1908逆序对参与者 3已保存回复 40

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
40 条
当前快照
1 份
快照标识符
@m24ncchq
此快照首次捕获于
2024/10/11 19:30
去年
此快照最后确认于
2025/11/05 01:43
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;

long long n;
long long a[100005],b[100005],c[100005];
long long ans;

inline void read(register long long &a){
	a = 0;
	char c;
	while((c = getchar()) < 48);
	do a = (a << 3) + (a << 1) + (c ^ 48);
	while((c  = getchar()) > 47);
}

void write(register long long v){
	if(v < 10) putchar(v|48);
	else write(v / 10),putchar(v % 10 | 48);
}

long long cmp(long long j,long long k){
	if(a[j] == a[k]) return j > k;
	return a[j] > a[k];
}

long long lowbit(int k){
	return k & -k;
}

void x(long long k){
	while(k <= n){
		b[k] ++;
		k += lowbit(k);
	}
	return ;
}

long long sum;

long long y(int k){
	sum = 0;
	while(k >= 1){
		sum += b[k];
		k -= lowbit(k);
	}
	return sum;
}

int main(){
	read(n);
	for(long long i = 1; i <= n; i++){
		read(a[i]);
		c[i] = i;
	}
	sort(c + 1,c + 1 + n,cmp);
	for(long long i = 1; i <= n; i++){
		x(c[i]);
		ans += y(c[i] - 1);
	}
	write(ans);
	return 0;
}

回复

40 条回复,欢迎继续交流。

正在加载回复...