제출 #995151

#제출 시각아이디문제언어결과실행 시간메모리
995151cadmiumskyMonochrome Points (JOI20_monochrome)C++17
0 / 100
1 ms348 KiB
#include <bits/stdc++.h> #define all(x) (x).begin(),(x).end() using namespace std; using ll = long long; using ld = long double; //#define int ll #define sz(x) ((int)(x).size()) using pii = pair<int,int>; using tii = tuple<int,int,int>; const int nmax = 2e5 + 5; #define lsb(x) (x & -x) struct AIB { vector<int> tree; void init(int n) { tree.assign(n + 5, 0); } void upd(int p, int x) { while(p < sz(tree)) tree[p] += x, p += lsb(p); } int query(int p) { int sum = 0; while(p > 0) sum += tree[p], p -= lsb(p); return sum; } }; signed main() { cin.tie(0) -> sync_with_stdio(0); int n; cin >> n; queue<int> que[2]; AIB aib; aib.init(n); for(int i = 1; i <= n; i++) { char ch; cin >> ch; if(ch == 'B') que[0].emplace(i); else que[1].emplace(i); } for(int i = 1; i <= n; i++) aib.upd(i, 1); ll sum = 0; for(int i = 1; i <= n; i++) { char ch; int P; cin >> ch; if(ch == 'B') P = que[1].front(), que[1].pop(); else P = que[0].front(), que[0].pop(); //cerr << aib.query(n) - aib.query(P); sum += aib.query(n) - aib.query(P); aib.upd(P, -1); } cout << sum << '\n'; } /** Istenem! Nu poate fi real. -- Surse verificate */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...