Submission #35410016
Source Code Expand
#include <iostream> // cout, endl, cin
#include <string> // string, to_string, stoi
#include <vector> // vector
#include <algorithm> // min, max, swap, sort, reverse, lower_bound, upper_bound
#include <utility> // pair, make_pair
#include <tuple> // tuple, make_tuple
#include <cstdint> // int64_t, int*_t
#include <cstdio> // printf
#include <map> // map
#include <queue> // queue, priority_queue
#include <set> // set
#include <stack> // stack
#include <deque> // deque
#include <unordered_map> // unordered_map
#include <unordered_set> // unordered_set
#include <bitset> // bitset
#include <cctype> // isupper, islower, isdigit, toupper, tolower
#include <iomanip>
#include <climits>
#include <cmath>
#include <functional>
#include <numeric>
#include <regex>
#include <array>
#include <fstream>
#include <sstream>
//#include<atcoder/modint>
//using namespace atcoder;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define rep1(i, n) for (int i = 1; i <= (int)(n); i++)
#define repl(i,l,r) for (int i = l; i < (int)(r); i++)
#define all(a) a.begin(),a.end()
#define Pii pair<int,int>
#define Pll pair<long,long>
#define INFi 1000000001
#define INFl 1000000000000000001
#define ll long long
using namespace std;
template<class T> inline bool chmin(T& a, T b) {
if (a > b) {
a = b;
return true;
}
return false;
}
template<class T> inline bool chmax(T& a, T b) {
if (a < b) {
a = b;
return true;
}
return false;
}
template<class T> void printArray(vector<T>&A){
for(T&a:A){
cout<<a<<" ";
}
cout<<endl;
}
template<class T> void printArrayln(vector<T>&A){
for(T&a:A){
cout<<a<<endl;
}
}
template<class T1,class T2> std::ostream &operator<<(std::ostream &out, const pair<T1,T2> &A){
cout<<"{"<<A.first<<","<<A.second<<"}";
return out;
}
template<class T1,class T2> std::ostream &operator<<(std::ostream &out, const map<T1,T2> &M){
for(const auto&A:M){
cout<<"{"<<A.first<<","<<A.second<<"}";
}
return out;
}
template<class T1> std::ostream &operator<<(std::ostream &out, const set<T1> &M){
cout<<"{";
for(const auto&A:M){
cout<<A<<", ";
}
cout<<"}"<<endl;
return out;
}
template<class T1> std::ostream &operator<<(std::ostream &out, const multiset<T1> &M){
cout<<"{";
for(const auto&A:M){
cout<<A<<", ";
}
cout<<"}"<<endl;
return out;
}
template<class T> std::ostream &operator<<(std::ostream &out, const vector<T> &A){
for(const T &a:A){
cout<<a<<" ";
}
return out;
}
void print() { cout << endl; }
template <typename Head, typename... Tail>
void print(Head H, Tail... T) {
cout << H << " ";
print(T...);
}
template<class T> std::istream &operator>>(std::istream &in,vector<T>&A){
for(T&a:A){
std::cin>>a;
}
return in;
}
template<typename T>
struct RSQ{
int n;
vector<T>dat;
const T ZERO;
RSQ(int n_,T ZERO_):ZERO(ZERO_){
n=1;
while(n<n_)n*=2;
//完全二分木にする
dat.assign(2*n-1,ZERO);
}
void update(int k,T a){
k+=n-1;// i番目は、配列上では n-1+i 番目に格納されている
dat[k]+=a;// 葉の更新
while(k>0){
k=(k-1)/2; //親のインデックス
// 子の和を計算
dat[k]=dat[k*2+1]+dat[k*2+2];
}
}
T query(int a,int b,int k,int l,int r){
if(r<=a||b<=l)return ZERO;//範囲外
if(a<=l&&r<=b)return dat[k]; //範囲内である
else{
T vl=query(a,b,k*2+1,l,(l+r)/2);
T vr=query(a,b,k*2+2,(l+r)/2,r);
return vl+vr;
}
}
//[a,b)の総和を求める
T query(int a,int b){
return query(a,b,0,0,n);
}
};
int main(void){
/*転倒数計算*/
int n;cin>>n;
vector<int>A(n);
for(int i=0;i<n;i++){
cin>>A[i];
A[i]--;
}
RSQ<int>rsq(n,0);
long ans=0;
for(int i=0;i<n;i++){
ans+=rsq.query(A[i]+1,n);
rsq.update(A[i],1);
}
cout<<ans<<endl;
}
Submission Info
Submission Time |
|
Task |
J - 転倒数 |
User |
shibaken496 |
Language |
C++ (GCC 9.2.1) |
Score |
400 |
Code Size |
4281 Byte |
Status |
AC |
Exec Time |
53 ms |
Memory |
4520 KiB |
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
400 / 400 |
Status |
|
|
Set Name |
Test Cases |
Sample |
sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt |
All |
sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt |
Case Name |
Status |
Exec Time |
Memory |
01-01.txt |
AC |
31 ms |
3828 KiB |
01-02.txt |
AC |
53 ms |
4332 KiB |
01-03.txt |
AC |
51 ms |
4468 KiB |
01-04.txt |
AC |
47 ms |
4520 KiB |
01-05.txt |
AC |
45 ms |
4348 KiB |
01-06.txt |
AC |
48 ms |
4416 KiB |
01-07.txt |
AC |
46 ms |
4408 KiB |
01-08.txt |
AC |
46 ms |
4320 KiB |
01-09.txt |
AC |
47 ms |
4356 KiB |
01-10.txt |
AC |
44 ms |
4372 KiB |
01-11.txt |
AC |
45 ms |
4316 KiB |
01-12.txt |
AC |
47 ms |
4396 KiB |
01-13.txt |
AC |
49 ms |
4380 KiB |
01-14.txt |
AC |
46 ms |
4416 KiB |
01-15.txt |
AC |
45 ms |
4332 KiB |
sample_01.txt |
AC |
2 ms |
3536 KiB |
sample_02.txt |
AC |
3 ms |
3424 KiB |
sample_03.txt |
AC |
2 ms |
3420 KiB |
sample_04.txt |
AC |
2 ms |
3456 KiB |