QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#592729#9302. Caesar Cipherreal_sigma_team#Compile Error//C++233.3kb2024-09-27 02:06:292024-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]
  • 评测
  • [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";
        }
    }
}

Details

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;
      |                                                             ^~~~~