提出 #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 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| 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 |