提出 #52981600


ソースコード 拡げる

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=400010;
int a[N],c[N],n,b[N],d[N];
ll cc[N];
void add(int x){
	for(;x<=n;x+=x&-x)++c[x];
}
void addc(int x,int v){
	for(;x<=n;x+=x&-x)cc[x]+=v;
}
ll sum(int x){
	int res=0;
	for(;x;x-=x&-x)res+=c[x];
	return res;
}
ll sumc(int x){
	ll res=0;
	for(;x;x-=x&-x)res+=cc[x];
	return res;
}
int main(){
	#ifdef ONLINE_JUDGE
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	#endif
	#ifndef ONLINE_JUDGE
	freopen("1.txt","r",stdin);
	#endif
	cin>>n;
	for(int i=1;i<=n;++i)
		cin>>a[i],b[i]=a[i];
	sort(a+1,a+1+n);
	int m=unique(a+1,a+1+n)-a,tot=0;
	ll totc=0,ans=0;
	for(int i=n;i;--i){
		int x=lower_bound(a+1,a+m,b[i])-a;
//		cout<<x<<'\n';
		ans+=(totc-sumc(x))-(tot-sum(x))*b[i];
//		cout<<sumc(x)<<'\n';
		++tot;
		totc+=b[i];
		add(x);
		addc(x,b[i]);
	}
	cout<<ans;
	return 0;
}

提出情報

提出日時
問題 F - Double Sum
ユーザ WUSICHENG
言語 C++ 17 (gcc 12.2)
得点 500
コード長 910 Byte
結果 AC
実行時間 119 ms
メモリ 11328 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 500 / 500
結果
AC × 2
AC × 11
セット名 テストケース
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 02_corner_00.txt, 02_corner_01.txt, 02_corner_02.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 1 ms 3412 KiB
00_sample_01.txt AC 1 ms 3340 KiB
01_random_00.txt AC 7 ms 4008 KiB
01_random_01.txt AC 119 ms 11240 KiB
01_random_02.txt AC 79 ms 8860 KiB
01_random_03.txt AC 118 ms 11328 KiB
01_random_04.txt AC 46 ms 6676 KiB
01_random_05.txt AC 119 ms 11288 KiB
02_corner_00.txt AC 39 ms 6576 KiB
02_corner_01.txt AC 1 ms 3416 KiB
02_corner_02.txt AC 43 ms 6668 KiB