BOJ/C++ 달리기 IamToday 2020. 3. 3. 21:58 *세그 트리 사용 #include #include #include #define MAXX 500001 using namespace std; typedef long long ll; typedef pair li; typedef pair ii; int n; int tree[MAXX]; li num[MAXX]; void update(int idx, int diff) { while(idx <= n) { tree[idx] += diff; idx += (idx & -idx); } } int sum(int idx) { int res = 0; while (idx > 0) { res += tree[idx]; idx -= (idx & -idx); } return res; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 1; i <= n; i++) { int tmp; cin >> tmp; num[i].first = tmp; num[i].second = i; update(i, 1); } sort(num+1, num+1+n); vector res; for (int i = 1; i <= n; i++) { //자신의 실력이 낮으면 자신보다 실력이 높지만 뒤에 있는 선수들을 1만큼 감소한다. res.push_back(ii(num[i].second, sum(num[i].second))); update(num[i].second, -1); } sort(res.begin(), res.end()); for (int i = 0; i < res.size(); i++) { cout << res[i].second << '\n'; } return 0; } 공유하기 게시글 관리 나는 오늘, 'BOJ > C++' 카테고리의 다른 글 두 동전 (0) 2020.03.04 개똥벌레 (0) 2020.03.03 배열돌리기3 (0) 2020.03.03 이동하기 (0) 2020.03.02 할로윈묘지 (0) 2020.03.02 'BOJ/C++' Related Articles 두 동전 개똥벌레 배열돌리기3 이동하기