problemscpp
A collection of my answers to algorithm problems in c++.
函数
acwing::acwing788 命名空间参考

  1. 逆序对的数量
更多...

函数

int main (istream &cin, ostream &cout)
 
void ms (vector< int > &arr, int l, int r, int *ans)
 
void ms (vector< int > &vec, int l, int r)
 
 TEST (acwing788, case1)
 
 TEST (acwing788, case2)
 

详细描述

  1. 逆序对的数量

函数说明

◆ main()

int acwing::acwing788::main ( istream &  cin,
ostream &  cout 
)

在文件 acwing.cpp6364 行定义.

6364 {
6365 int n;
6366 cin >> n;
6367 vector<int> vec(n);
6368 for(int i = 0; i < n; i++) {
6369 cin >> vec[i];
6370 }
6371 int ans = 0;
6372 ms(vec, 0, n - 1, &ans);
6373 cout << ans;
6374 return 0;
6375 }
void ms(vector< int > &arr, int l, int r, int *ans)
Definition: acwing.cpp:6334
int vec[100010]
Definition: pat.cpp:5095

引用了 ms() , 以及 pat::a::a7_2::vec.

被这些函数引用 TEST().

◆ ms() [1/2]

void acwing::acwing788::ms ( vector< int > &  arr,
int  l,
int  r,
int *  ans 
)

在文件 acwing.cpp6334 行定义.

6334 {
6335 if(l >= r) {
6336 return;
6337 }
6338 const int m = l + r >> 1;
6339 ms(arr, l, m, ans);
6340 ms(arr, m + 1, r, ans);
6341 int i = l;
6342 int j = m + 1;
6343 int p = 0;
6344 vector<int> tmp(r - l + 1);
6345 while(i <= m && j <= r) {
6346 if(arr[i] <= arr[j]) {
6347 tmp[p++] = arr[i++];
6348 } else {
6349 tmp[p++] = arr[j++];
6350 *ans += m - i + 1;
6351 }
6352 }
6353 while(i <= m) {
6354 tmp[p++] = arr[i++];
6355 }
6356 while(j <= r) {
6357 tmp[p++] = arr[j++];
6358 }
6359 for(int i = 0; i < p; i++) {
6360 arr[l + i] = tmp[i];
6361 }
6362 }

引用了 ms().

被这些函数引用 main(), acwing::acwing1875::main(), acwing::acwing1726::main(), luogu::P1603::main(), leetcode::sliding_window_maximum::Solution::maxSlidingWindow() , 以及 ms().

◆ ms() [2/2]

void acwing::acwing788::ms ( vector< int > &  vec,
int  l,
int  r 
)

◆ TEST() [1/2]

acwing::acwing788::TEST ( acwing788  ,
case1   
)

在文件 acwing_test.cpp2979 行定义.

2979 {
2980 istringstream in("6\n"
2981 "2 3 4 5 6 1");
2982 auto out = ostringstream();
2983 main(in, out);
2984 const auto ans = out.str();
2985 ASSERT_EQ("5", ans);
2986 }
int main(int argc, char **argv)
Definition: main.cpp:5

引用了 main().

◆ TEST() [2/2]

acwing::acwing788::TEST ( acwing788  ,
case2   
)

在文件 acwing_test.cpp2988 行定义.

2988 {
2989 istringstream in("10\n"
2990 "88 71 16 2 72 38 94 50 72 67");
2991 auto out = ostringstream();
2992 main(in, out);
2993 const auto ans = out.str();
2994 ASSERT_EQ("21", ans);
2995 }

引用了 main().