結果
問題 | No.1439 Let's Compare!!!! |
ユーザー |
![]() |
提出日時 | 2021-03-26 21:43:16 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 153 ms / 2,000 ms |
コード長 | 2,260 bytes |
コンパイル時間 | 3,205 ms |
コンパイル使用メモリ | 196,820 KB |
最終ジャッジ日時 | 2025-01-19 22:08:18 |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 17 |
ソースコード
#include <bits/stdc++.h>using namespace std;#define ll long long#define ld long double#define REP(i,m,n) for(int i=(int)(m); i<(int)(n); i++)#define rep(i,n) REP(i,0,n)#define RREP(i,m,n) for(int i=(int)(m); i>=(int)(n); i--)#define rrep(i,n) RREP(i,(n)-1,0)#define all(v) v.begin(), v.end()#define endk '\n'const int inf = 1e9+7;const ll longinf = 1LL<<60;const ll mod = 1e9+7;const ll mod2 = 998244353;const ld eps = 1e-10;template<typename T1, typename T2> inline void chmin(T1 &a, T2 b){if(a>b) a=b;}template<typename T1, typename T2> inline void chmax(T1 &a, T2 b){if(a<b) a=b;}template< typename T >struct BinaryIndexedTree {using U =typename std::conditional<std::is_same<T, long long>::value,unsigned long long,unsigned int>::type;BinaryIndexedTree(int sz) : _n(sz) {data.assign(++sz, 0);}T sum(int l, int r) {assert(0 <= l && l <= r && r <= _n);return sum(r) - sum(l);}void add(int p, T x) {assert(0 <= p && p < _n);p++;while(p <= _n) {data[p - 1] += U(x);p += p & -p;}}private:vector< U > data;int _n;U sum(int r) {U ret = 0;while(r > 0) {ret += data[r - 1];r -= r & -r;}return ret;}};int main() {cin.tie(0);ios::sync_with_stdio(false);int n; cin >> n;string s, t; cin >> s >> t;BinaryIndexedTree<int> bit(n+1);rep(i, n) {if(s[i] > t[i]) bit.add(i, 1);else if(s[i] < t[i]) bit.add(i, 2);else bit.add(i, 0);}bit.add(n, 3);auto bsearch = [&]() {int ok = n, ng = -1;while(abs(ok-ng)>1) {int mid = (ok+ng)/2;(bit.sum(0, mid+1) ? ok : ng) = mid;}return ok;};int q; cin >> q;rep(_, q) {char c; cin >> c;int x, y; cin >> x >> y;x--;if(c == 'S') {s[x] = char('0'+y);} else {t[x] = char('0'+y);}if(s[x] > t[x]) bit.add(x, 1-bit.sum(x, x+1));else if(s[x] < t[x]) bit.add(x, 2-bit.sum(x, x+1));else bit.add(x, 0-bit.sum(x, x+1));int i = bsearch();if(bit.sum(i, i+1) == 1) cout << ">" << endk;else if(bit.sum(i, i+1) == 2) cout << "<" << endk;else cout << "=" << endk;}return 0;}