当前位置:Gxlcms > html代码 > CodeforcesRound#261(Div.2)D树状数组应用_html/css_WEB-ITnose

CodeforcesRound#261(Div.2)D树状数组应用_html/css_WEB-ITnose

时间:2021-07-01 10:21:17 帮助过:21人阅读

看着题意:[1,i]中等于a[i]的个数要大于[,jn]中等于a[j]的个数 且i


int n;int aa[1000000 + 55];int bb[1000000 + 55];int c[1000000 + 55];map	mp;ll lowbit(ll x) {	return x&(-x);}void add(int i,int val) {	while(i <= n) {		c[i] += val;		i += lowbit(i);	}}ll get_sum(int i) {	ll sum = 0;	while(i) {		sum += c[i];		i -= lowbit(i);	}	return sum;}void init() {	memset(c,0,sizeof(c));	memset(aa,0,sizeof(aa));	memset(bb,0,sizeof(bb));	mp.clear();}int main() {	while(scanf("%d",&n) == 1) {		init();		for(int i=1;i<=n;i++)scanf("%d",&aa[i]);		for(int i=1;i<=n;i++) {			mp[aa[i]]++;			bb[i] = mp[aa[i]];			add(bb[i],1);		}		mp.clear();		ll ans = 0ll;		for(int i=n;i>=1;i--) {			add(bb[i],-1);			mp[aa[i]]++;			int tmp = mp[aa[i]];			ans += i - get_sum(tmp) - 1;		}		cout<                    

人气教程排行