結果
| 問題 |
No.2933 Range ROT Query
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-05-15 04:27:54 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,419 bytes |
| コンパイル時間 | 1,110 ms |
| コンパイル使用メモリ | 80,052 KB |
| 実行使用メモリ | 10,184 KB |
| 最終ジャッジ日時 | 2025-05-15 04:28:12 |
| 合計ジャッジ時間 | 16,661 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 2 |
| other | AC * 13 WA * 37 |
ソースコード
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class SegmentTree {
vector<int> lazy;
int size;
public:
SegmentTree(int n) {
size = n;
lazy.resize(4 * n, 0);
}
void updateRange(int node, int start, int end, int l, int r, int val) {
if (start > end || start > r || end < l)
return;
if (start >= l && end <= r) {
lazy[node] = (lazy[node] + val) % 26;
return;
}
int mid = (start + end) / 2;
updateRange(2*node, start, mid, l, r, val);
updateRange(2*node+1, mid+1, end, l, r, val);
}
int query(int node, int start, int end, int idx) {
if (start > end)
return 0;
if (start == end) {
return lazy[node];
}
int mid = (start + end) / 2;
int rot = lazy[node];
if (idx <= mid) {
return (rot + query(2*node, start, mid, idx)) % 26;
} else {
return (rot + query(2*node+1, mid+1, end, idx)) % 26;
}
}
void update(int l, int r, int val) {
updateRange(1, 0, size-1, l-1, r-1, val);
}
int get(int idx) {
return query(1, 0, size-1, idx-1);
}
};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
string S, T;
cin >> S >> T;
SegmentTree segS(S.length());
SegmentTree segT(T.length());
int Q;
cin >> Q;
while (Q--) {
int queryType;
cin >> queryType;
if (queryType == 1) {
int l, r, x;
cin >> l >> r >> x;
segS.update(l, r, x);
}
else if (queryType == 2) {
int l, r, x;
cin >> l >> r >> x;
segT.update(l, r, x);
}
else if (queryType == 3) {
int p;
cin >> p;
char actualS = 'a' + ((S[p-1] - 'a' + segS.get(p)) % 26);
char actualT = 'a' + ((T[p-1] - 'a' + segT.get(p)) % 26);
if (actualS > actualT) {
cout << "Greater" << endl;
}
else if (actualS < actualT) {
cout << "Lesser" << endl;
}
else {
cout << "Equals" << endl;
}
}
}
return 0;
}