这里是代码
// LUOGU_RID: 138277888
// LUOGU_RID: 138274728
// 如果命运对你缄默, 那就活给他看。
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast", "inline", "-ffast-math")
#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
// #define int LL
// typedef pair<int, int> PII;
// #define x first
// #define y second
#define epb emplace_back
#define ep emplace
const int N = 1e6 + 10;
typedef unsigned long long uLL;
const int p = 13331;
struct Node {
uLL h1, h2;
int pw;
} t[N << 2];
int n, q;
uLL pw[N];
char s[N];
inline Node mg(Node l, Node r) {
Node v;
if(!l.pw) return r;
v.h1 = l.h1 * (:: pw[l.pw]) + r.h1;
v.h2 = r.h2 * (:: pw[r.pw]) + l.h2;
v.pw = l.pw + r.pw;
return v;
}
inline void upd(int u, int l, int r, int p, int x) {
if(l == r) {
t[u].h1 = t[u].h2 = x;
t[u].pw = 1;
return ;
}
int mid = l + r >> 1;
if(p <= mid) upd(u << 1, l, mid, p, x);
else upd(u << 1 | 1, mid + 1, r, p, x);
t[u] = mg(t[u << 1], t[u << 1 | 1]);
return ;
}
inline Node query(int u, int l, int r, int Ql, int Qr) {
if(Ql <= l and Qr >= r) return t[u];
Node v = {0, 0, 0};
int mid = l + r >> 1;
if(Ql <= mid) v = query(u << 1, l, mid, Ql, Qr);
if(Qr > mid) v = mg(v, query(u << 1 | 1, mid + 1, r, Ql, Qr));
return v;
}
signed main() {
// freopen(".in", "r", stdin);
// freopen(".out", "w", stdout);
ios :: sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> n >> q >> (s + 1);
pw[0] = 1;
for(int i = 1; i <= n; ++ i) pw[i] = pw[i - 1] * p;
for(int i = 1; i <= n; ++ i) upd(1, 1, n, i, s[i] - 'a' + 1);
for(int op, x, y; q --; ) {
cin >> op;
if(op == 1) {
char c;
cin >> x >> c;
upd(1, 1, n, x, c - 'a' + 1);
s[x] = c;
} else {
cin >> x >> y;
if(x == y) cout << "Yes" << '\n';
else {
int len = (y - x + 1) >> 1;
uLL t1 = query(1, 1, n, x, x + len - 1).h2,
t2 = query(1, 1, n, y - len + 1, y).h1;
cout << ((t1 ^ t2) ? "No" : "Yes") << '\n';
}
}
}
return 0;
}
拍子
// 如果命运对你缄默, 那就活给他看。
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast", "inline", "-ffast-math")
#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
// #define int LL
// typedef pair<int, int> PII;
// #define x first
// #define y second
#define epb emplace_back
#define ep emplace
const int N = 10;
signed main() {
// freopen(".in", "r", stdin);
// freopen(".out", "w", stdout);
// ios :: sync_with_stdio(false);
// cin.tie(0), cout.tie(0);
srand(time(0));
int n = rand() % N + 1;
int q = rand() % n + 1;
cout << n << ' ' << q << '\n';
string s = "";
for(int i = 1; (int)s.size() < n; ++ i) {
s += rand() % 26 + 'a';
if(rand() % 2 == 0 and s.size() * 2 <= n) {
string t = s;
reverse(t.begin(), t.end());
if(rand() % 2 == 0 and s.size() * 2 + 1 <= n) s += rand() % 26 + 1;
s += t;
}
}
cout << s << '\n';
while(q -- ) {
int op = rand() % 2;
if(op == 1) {
int p = rand() % n + 1;
char c = rand() % 26 + 'a';
cout << 1 << ' ' << p << ' ' << c << '\n';
} else {
int l = rand() % n + 1, r = rand() % n + 1;
if(l > r) swap(l, r);
cout << 2 << ' ' << l << ' ' << r << '\n';
}
}
return 0;
}
呃,如你所见,这是个很烂很烂的拍子。事实上,这个拍子在大多数时候都无法起到对拍的作用,但是当数据范围比较小的时候,也许可以靠 数据量大 buff 掉生成器本身的烂()。
遗憾立离场。也许几个小时之后我会回来升级一波拍子。