結果
問題 | No.2761 Substitute and Search |
ユーザー |
|
提出日時 | 2024-05-17 22:25:31 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 207 ms / 4,000 ms |
コード長 | 1,846 bytes |
コンパイル時間 | 2,888 ms |
コンパイル使用メモリ | 215,196 KB |
最終ジャッジ日時 | 2025-02-21 15:02:55 |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 13 |
ソースコード
#include <bits/stdc++.h>using namespace std;using ll = long long;template<class T> istream& operator >> (istream& is, vector<T>& vec) {for(T& x : vec) is >> x;return is;}template<class T> ostream& operator << (ostream& os, const vector<T>& vec) {if(vec.empty()) return os;os << vec[0];for(auto it = vec.begin(); ++it != vec.end(); ) os << ' ' << *it;return os;}int main(){ios::sync_with_stdio(false);cin.tie(0);int n, l, q;cin >> n >> l >> q;vector<string> s(n);for(auto &&ss : s) cin >> ss;sort(s.begin(), s.end());vector<int> ord(n);vector<bool> used(n);iota(ord.begin(), ord.end(), 0);auto fr = [&](string &t){int m = t.size();int ok = -1, ng = n, mid;while(ok + 1 < ng){mid = (ok + ng) / 2;(t >= s[ord[mid]].substr(0, m) ? ok : ng) = mid;}return ok;};auto fl = [&](string &t){int m = t.size();int ok = -1, ng = n, mid;while(ok + 1 < ng){mid = (ok + ng) / 2;(t > s[ord[mid]].substr(0, m) ? ok : ng) = mid;}return ok;};while(q--){int cmd;cin >> cmd;if(cmd == 1){int k;char c1, c2;cin >> k >> c1 >> c2;k--;for(int i = 0; i < n; i++){if(s[i][k] == c1){s[i][k] = c2;used[i] = true;}else used[i] = false;}stable_sort(ord.begin(), ord.end(), [&](int lhs, int rhs){if(used[lhs] ^ used[rhs]) return s[lhs] < s[rhs];return false;});}else{string t;cin >> t;cout << fr(t) - fl(t) << '\n';}}}