結果
| 問題 |
No.2933 Range ROT Query
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-09-09 12:24:38 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 401 ms / 3,000 ms |
| コード長 | 1,668 bytes |
| コンパイル時間 | 1,164 ms |
| コンパイル使用メモリ | 98,604 KB |
| 最終ジャッジ日時 | 2025-02-24 06:17:31 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 50 |
ソースコード
#include <iostream>
#include <vector>
#include <string>
#include <atcoder/lazysegtree>
#include <atcoder/fenwicktree>
int op(int x, int y) {
if(x == -2) return y;
if(y == -2) return x;
if(x == y) return x;
else return -1;
}
int e() {
return -2;
}
int mapping(int f, int x) {
if(x < 0) return -1;
return (f + x + 26) % 26;
}
int composition(int f, int g) {
return (f + g + 26) % 26;
}
int ide() {
return 0;
}
bool f(int x) {
return x == 0 || x == -2;
}
int main() {
std::string S, T;
std::cin >> S >> T;
int N = (int)std::min(S.size(), T.size());
std::vector<int> init(N);
for(int i=0;i<N;++i) {
init[i] = (S[i] - T[i] + 26) % 26;
}
atcoder::lazy_segtree<int, op, e, int, mapping, composition, ide> seg(init);
atcoder::fenwick_tree<int> fw(N + 1);
for(int i=0;i<N;++i) {
int x = S[i] - 'a';
fw.add(i, x);
fw.add(i+1, -x);
}
int Q;
std::cin >> Q;
while(Q--) {
int t;
std::cin >> t;
if(t == 1) {
int l, r, x;
std::cin >> l >> r >> x;
if(N < l) continue;
r = std::min(r, N);
seg.apply(l-1, r, x);
fw.add(l-1, x);
fw.add(r, -x);
} else if(t == 2) {
int l, r, x;
std::cin >> l >> r >> x;
if(N < l) continue;
r = std::min(r, N);
seg.apply(l-1, r, -x);
} else {
int p, q;
std::cin >> p; p--;
q = seg.max_right<f>(p);
if(q == N) {
if(S.size() == T.size()) std::cout << "Equals";
else if(S.size() < T.size()) std::cout << "Lesser";
else std::cout << "Greater";
} else {
int s = fw.sum(0, q + 1) % 26;
int t = (s - seg.get(q) + 26) % 26;
if(s < t) std::cout << "Lesser";
else std::cout << "Greater";
}
std::cout << std::endl;
}
}
}