이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
constexpr int MAXN=300'000;
int n;
struct {
int data_[MAXN+1];
int query(int index){
int ret=0;
for(;index>0;index-=(index&-index)){
ret+=data_[index];
}
return ret;
}
void update(int index){
for(++index;index<=n;index+=(index&-index)){
++data_[index];
}
}
} fw;
pair<long long, int> arr[MAXN];
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin>>n;
assert(3<=n&&n<=MAXN);
for(int i=0;i<n;++i){
cin>>arr[i].first;
assert(0<=arr[i].first&&arr[i].first<=1'000'000'000'000'000'000ll);
arr[i].second=i;
}
sort(arr,arr+n,[](const pair<long long, int>& a, const pair<long long, int>& b){
return a.first<b.first;
});
long long ans=0;
for(int i=0;i<n;){
const long long val=arr[i].first;
int j;
for(j=i;j<n&&arr[j].first==val;++j){
const int idx=arr[j].second;
const int tmp=fw.query(idx);
ans+=tmp*static_cast<long long>(i-tmp);
}
for(;i<j;++i){
const int idx=arr[i].second;
fw.update(idx);
}
}
cout<<ans<<'\n';
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |