이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "bits/stdc++.h"
using namespace std;
// #define endl '\n'
#define int long long
struct node {
   int s, e, m, val;
   node *l, *r;
   node (int _s, int _e) {
       s = _s;
       e = _e;
       m = (s + e)/2;
       val = 0;
       if (s == e) return;
       l = new node(s, m);
       r = new node(m+1, e);
   }
   void upd(int p, int v) {
       if (s == p && s== e) {
           val = v;
           return;
       }
       if (p <= m) {
           l->upd(p, v);
       }
       else {
           r->upd(p, v);
       }
       val = l->val + r->val; // transition
   }
   int qry(int qs, int qe) {
       if (qs <= s && e <= qe) {
           return val;
       }
       else if (qs > e || s > qe) {
           return 0; // base case
       }
       else {
           return l->qry(qs, qe) + r->qry(qs, qe); // transition
       }
   }
} *root;
signed main() {
	
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	
	int n;
	cin >> n;
	vector<pair<int, int> > t;
	for (int i=0; i<n; i++) {
		int x;
		cin >> x;
		t.push_back(make_pair(x, i));
	}
	
	root = new node(0, n-1);
	
	sort(t.begin(), t.end());
	
	vector<vector<int> > pos;
	pos.push_back(vector<int>());
	
	for (int i=0; i<t.size(); i++) {
		if (i != 0 && t[i].first != t[i-1].first) pos.push_back(vector<int>());
		pos.back().push_back(t[i].second);
	}
	
	int ans = 0;
	
	for (int i=0; i<pos.size(); i++) {
		for (int j=0; j<pos[i].size(); j++) {
			ans += (root->qry(0, pos[i][j]-1) * root->qry(pos[i][j]+1, n-1));
		}
		for (int j=0; j<pos[i].size(); j++) {
			root->upd(pos[i][j], 1);
		}
	}
	
	cout << ans << endl;
	
	
	
}
컴파일 시 표준 에러 (stderr) 메시지
Mountains.cpp: In function 'int main()':
Mountains.cpp:67:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i=0; i<t.size(); i++) {
                ~^~~~~~~~~
Mountains.cpp:74:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i=0; i<pos.size(); i++) {
                ~^~~~~~~~~~~
Mountains.cpp:75:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int j=0; j<pos[i].size(); j++) {
                 ~^~~~~~~~~~~~~~
Mountains.cpp:78:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int j=0; j<pos[i].size(); j++) {
                 ~^~~~~~~~~~~~~~| # | 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... |