列表

详情


NC222497. [USACOOpen2020G]Haircut

描述

Tired of his stubborn cowlick, Farmer John decides to get a haircut. He has N (1≤N≤105) strands of hair arranged in a line, and strand i is initially Ai micrometers long (0≤Ai≤N). Ideally, he wants his hair to be monotonically increasing in length, so he defines the "badness" of his hair as the number of inversions: pairs (i,j) such that i<j and Ai>Aj.
For each of j=0,1,…,N−1, FJ would like to know the badness of his hair if all strands with length greater than j are decreased to length exactly j.

(Fun fact: the average human head does indeed have about 105 hairs!)

输入描述

The first line contains N.
The second line contains A1,A2,…,AN.

输出描述

For each of j=0,1,…,N−1, output the badness of FJ's hair on a new line.
Note that the large size of integers involved in this problem may require the use of 64-bit integer data types (e.g., a "long long" in C/C++).

示例1

输入:

5
5 2 3 3 0

输出:

0
4
4
5
7

说明:

The fourth line of output describes the number of inversions when FJ's hairs are decreased to length 3. Then A=[3,2,3,3,0]A=[3,2,3,3,0] has five inversions: A1>A2,A1>A5,A2>A5,A3>A5,A1>A2,A1>A5,A2>A5,A3>A5, and A4>A5

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 584ms, 内存消耗: 11296K, 提交时间: 2022-03-29 10:49:47

// USACO 2020 Open G. Haircut
#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
template <class T>
using Tree =
    tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define _for(i, a, b) for (int i = (a); i < (int)(b); ++i)
int main() {
  ios::sync_with_stdio(false), cin.tie(0);
  int N;
  cin >> N;
  vector<vector<int>> Loc(N + 1);
  for (int i = 0, a; i < N; ++i) cin >> a, Loc[a].push_back(i);
  Tree<int> T;
  vector<long long> cInv(N + 2);
  for (int a = N; a >= 0; --a) {
    for (int t : Loc[a]) cInv[a + 1] += T.order_of_key(t);
    for (int t : Loc[a]) T.insert(t);
  }
  _for(i, 1, N) cInv[i] += cInv[i - 1];
  _for(i, 0, N) cout << cInv[i] << endl;
}
// Accepted 100 [USACO20OPEN]Haircut G 964ms 10.06MB 740B C++11

上一题