QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#592729 | #9302. Caesar Cipher | real_sigma_team# | Compile Error | / | / | C++23 | 3.3kb | 2024-09-27 02:06:29 | 2024-09-27 02:06:30 |
Judging History
你现在查看的是最新测评结果
- [2024-11-04 17:10:09]
- hack成功,自动添加数据
- (/hack/1110)
- [2024-10-21 09:47:48]
- hack成功,自动添加数据
- (/hack/1022)
- [2024-10-21 09:39:50]
- hack成功,自动添加数据
- (/hack/1021)
- [2024-10-21 09:31:34]
- hack成功,自动添加数据
- (/hack/1020)
- [2024-10-03 10:14:59]
- hack成功,自动添加数据
- (/hack/928)
- [2024-09-28 07:51:27]
- hack成功,自动添加数据
- (/hack/922)
- [2024-09-28 07:42:39]
- hack成功,自动添加数据
- (/hack/921)
- [2024-09-27 02:06:30]
- 评测
- 测评结果:Compile Error
- 用时:0ms
- 内存:0kb
- [2024-09-27 02:06:29]
- 提交
answer
#include <bits/stdc++.h>
#include <immintrin.h>
using namespace std;
using ll = long long;
using ld = long double;
# define x first
# define y second
# define all(x) x.begin(), x.end()
# define rall(x) x.rbegin(), x.rend()
mt19937 mt(123);
void solve();
void init();
int32_t main() {
#ifndef LOCAL
cin.tie(nullptr)->sync_with_stdio(false);
#endif
init();
cout << fixed << setprecision(10);
int t = 1;
// cin >> t;
while (t--) {
solve();
}
}
#define int ll
int mod = 1e9 + 321;
int base = 4713890;
int add(int a, int b) {
return a + b >= mod ? a + b - mod : a + b;
}
int sub(int a, int b) {
return a >= b ? a - b : a + mod - b;
}
int mul(int a, int b) {
return 1ll * a * b % mod;
}
const int N = 5e5 + 10;
struct elem {
int hsh = 0, sz = 0;
elem() = default;
elem(int x) : hsh(x), sz(1) {}
};
int mx[4 * N], lazy[4 * N], sum[N], pw[N];
elem tr[4 * N];
elem operator+(elem left, elem right) {
elem res;
res.hsh = add(left.hsh, mul(pw[left.sz], right.hsh));
res.sz = left.sz + right.sz;
return res;
}
void apply(int node, int x) {
tr[node].hsh = add(tr[node].hsh, mul(x, sum[tr[node].sz]));
lazy[node] += x;
}
void push(int node) {
apply(node << 1, lazy[node]);
apply(node << 1 | 1, lazy[node]);
lazy[node] = 0;
}
int a[N];
void build(int node, int l, int r) {
if (l == r) {
mx[node] = a[l];
tr[node] = elem(a[l]);
} else {
int m = (l + r) / 2;
build(node << 1, l, m);
build(node << 1 | 1, m + 1, r);
tr[node] = tr[node << 1] + tr[node << 1 | 1];
mx[node] = max(mx[node << 1], mx[node << 1 | 1]);
}
}
void update(int ql, int qr, int node, int l, int r) {
if (r < ql || qr < l) return;
if (ql <= l && r <= qr) {
if (l == r) {
mx[node] = (mx[node] + 1) % 65536;
tr[node] = elem(mx[node]);
return;
} else if (mx[node] + 1 < 65536) {
apply(node, 1);
return;
}
}
int m = (l + r) / 2;
push(node);
update(ql, qr, node << 1, l, m);
update(ql, qr, node << 1 | 1, m + 1, r);
tr[node] = tr[node << 1] + tr[node << 1 | 1];
mx[node] = max(mx[node << 1], mx[node << 1 | 1]);
}
elem get(int ql, int qr, int node, int l, int r) {
if (r < ql || qr < l) return elem();
if (ql <= l && r <= qr) return tr[node];
int m = (l + r) / 2;
return get(ql, qr, node << 1, l, m) + get(ql, qr, node << 1 | 1, m + 1, r);
}
void init() {}
void solve() {
int n, q;
cin >> n >> q;
pw[0] = 1;
for (int i = 1; i < n; ++i) pw[i] = mul(pw[i - 1], base);
for (int i = 0; i < n; ++i) sum[i + 1] = add(sum[i], pw[i]);
for (int i = 0; i < n; ++i) cin >> a[i];
build(1, 0, n - 1);
while (q--) {
int type;
cin >> type;
if (type == 1) {
int l, r;
cin >> l >> r;
--l, --r;
update(l, r, 1, 0, n - 1);
} else {
int a, b, len;
cin >> a >> b >> len;
--a, --b;
if (get(a, a + len - 1, 1, 0, n - 1).hsh == get(b, b + len - 1, 1, 0, n - 1).hsh) cout << "yes\n";
else cout << "no\n";
}
}
}
詳細信息
In file included from /usr/include/c++/13/bits/stl_pair.h:62, from /usr/include/c++/13/bits/stl_algobase.h:64, from /usr/include/c++/13/algorithm:60, from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:51, from answer.code:1: /usr/include/c++/13/bits/utility.h: In instantiation of ‘constexpr const std::size_t std::tuple_size_v<int>’: /usr/include/c++/13/tuple:2298:24: required from ‘constexpr decltype(auto) std::apply(_Fn&&, _Tuple&&) [with _Fn = long long int&; _Tuple = int]’ answer.code:98:18: required from here /usr/include/c++/13/bits/utility.h:75:61: error: incomplete type ‘std::tuple_size<int>’ used in nested name specifier 75 | inline constexpr size_t tuple_size_v = tuple_size<_Tp>::value; | ^~~~~