求助
  • 板块灌水区
  • 楼主Emplace
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/1/12 22:01
  • 上次更新2024/1/13 10:29:34
查看原帖
求助
745865
Emplace楼主2024/1/12 22:01

P5094

#include<bits/stdc++.h>
using namespace std;
long long n,m;
long long c1[200000],c2[200000],suum[2000000],ans;
struct node{
	long long u,x;
}a[2000000];
bool cmp(node s1,node s2){
	return s1.u<s2.u;
}
long long lb(long long x){
	return x&(-x);
}
long long updata(long long x,long long k){
	for(long long i=x;i<=n;i+=lb(i)){
		c1[i]+=k;
	}
}
long long updata1(long long x,long long k){
	for(long long i=x;i<=n;i+=lb(i)){
		c2[i]+=k;
	}
}
long long sum(long long x){
	long long ans=0;
	for(long long i=x;i>0;i-=lb(i)){
		ans+=c1[i];
	}
	return ans;
}
long long sum1(long long x){
	long long ans=0;
	for(long long i=x;i>0;i-=lb(i)){
		ans+=c2[i];
	}
	return ans;
}
int main(){
    cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].u>>a[i].x;
	} 
	sort(a+1,a+1+n,cmp);
	for(int i=1;i<=n;i++){
		suum[i]=suum[i-1]+a[i].x;
	}
	for(int i=1;i<=n;i++){
		int t1=sum(a[i].x);
		int t2=sum1(a[i].x);
		ans+=(t1*a[i].x-t2)*a[i].u;

		ans+=((suum[i-1]-t2)-(i-t1-1)*a[i].x)*a[i].u;
		updata(a[i].x,1);
		updata1(a[i].x,a[i].x);
	}
	cout<<ans;
	return 0;
}

有没有大佬帮忙看看

2024/1/12 22:01
加载中...