제출 #1316370

#제출 시각아이디문제언어결과실행 시간메모리
1316370djsksbrbfMountains (NOI20_mountains)C++20
100 / 100
472 ms43852 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair <ll, ll> pii; #define fi first #define se second #define pb push_back const int MOD = 1e9; const int MAX = 3e5 + 5; const int dx[4] = {0, 0, 1, -1}; const int dy[4] = {1, -1, 0, 0}; #define int ll int seg[4*MAX]; void upd(int l, int r, int id, int pos){ if(l == r){ if(l == id){ seg[pos] = 1; } return; } int mid = (l + r) >> 1; if(id <= mid)upd(l, mid, id, 2*pos); else upd(mid + 1, r, id, 2*pos + 1); seg[pos] = seg[2*pos] + seg[2*pos + 1]; } int que(int l, int r, int tl, int tr, int pos){ if(r < tl || tr< l || tr < tl)return 0; if(tl <= l && r <= tr)return seg[pos]; int mid = (l + r) >> 1; return que(l, mid, tl, tr, 2*pos) + que(mid + 1, r, tl, tr, 2*pos + 1); } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; int a[n + 5]; for(int i = 1 ; i <= n ; i++)cin >> a[i]; ll ans = 0; map <int, vector<int>> mp; for(int i = 1 ;i <= n ; i++)mp[a[i]].pb(i); for(auto it : mp){ for(auto i : it.se){ ans += que(1, n, i + 1, n, 1)*que(1, n, 1, i - 1, 1); } for(auto i : it.se){ upd(1, n, i, 1); } } cout << ans << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...