QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#571631#9302. Caesar Cipherretired_midlightsWA 649ms23340kbC++143.1kb2024-09-18 01:47:522024-09-18 01:47:52

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-26 18:56:14]
  • hack成功,自动添加数据
  • (/hack/911)
  • [2024-09-23 07:21:34]
  • hack成功,自动添加数据
  • (/hack/885)
  • [2024-09-20 15:14:45]
  • hack成功,自动添加数据
  • (/hack/855)
  • [2024-09-20 14:21:31]
  • hack成功,自动添加数据
  • (/hack/854)
  • [2024-09-20 14:19:40]
  • hack成功,自动添加数据
  • (/hack/853)
  • [2024-09-20 14:16:01]
  • hack成功,自动添加数据
  • (/hack/851)
  • [2024-09-20 14:12:05]
  • hack成功,自动添加数据
  • (/hack/850)
  • [2024-09-20 14:10:12]
  • hack成功,自动添加数据
  • (/hack/849)
  • [2024-09-18 01:47:52]
  • 评测
  • 测评结果:WA
  • 用时:649ms
  • 内存:23340kb
  • [2024-09-18 01:47:52]
  • 提交

answer

#include <bits/stdc++.h>
#define rep(i, a, b) for(int i = (int)a; i <= (int)b; i ++)
#define ll long long
#define ls p << 1
#define rs p << 1 | 1
using namespace std;

const int maxn = 500010, base = 4, mod = 1e9 + 7;

struct Info {
    int tag, mx, hsh;
} t[maxn << 2];

int n, q, a[maxn], power[maxn], sum[maxn];

void push_up(int p, int l, int r) {
    t[p].mx = max(t[ls].mx, t[rs].mx);
    int mid = (l + r) >> 1;
    t[p].hsh = (1ll * t[ls].hsh * power[r - mid] % mod + t[rs].hsh) % mod;
}

void build(int p, int l, int r) {
    if(l == r) {
        t[p].mx = t[p].hsh = a[l];
        return;
    }
    int mid = (l + r) >> 1;
    build(ls, l, mid), build(rs, mid + 1, r);
    push_up(p, l, r);
}

void push_down(int p, int l, int r) {
    t[ls].tag += t[p].tag, t[rs].tag += t[p].tag;
    t[ls].mx += t[p].mx, t[rs].mx += t[p].mx;
    int mid = (l + r) >> 1;
    t[ls].hsh = (t[ls].hsh + 1ll * sum[mid - l] * t[p].tag % mod) % mod;
    t[rs].hsh = (t[rs].hsh + 1ll * sum[r - mid] * t[p].tag % mod) % mod;
    t[p].tag = 0;
}

void modify_force(int p, int l, int r) {
    // cout << p << " " << l << " " << r << endl;
    if(l == r) {
        t[p].mx %= 65536;
        t[p].hsh = t[p].mx;
        return;
    }
    if(t[p].tag) push_down(p, l, r);
    int mid = (l + r) >> 1;
    if(t[ls].mx >= 65536) modify_force(ls, l, mid);
    if(t[rs].mx >= 65536) modify_force(rs, mid + 1, r);
    push_up(p, l, r);
}

void modify(int p, int l, int r, int ql, int qr) {
    if(ql <= l && r <= qr) {
        t[p].tag ++;
        t[p].mx ++;
        t[p].hsh = (t[p].hsh + sum[r - l]) % mod;
        if(t[p].mx >= 65536) {
            modify_force(p, l, r);
        }
        return;
    }
    if(t[p].tag) push_down(p, l, r);
    int mid = (l + r) >> 1;
    if(ql <= mid) modify(ls, l, mid, ql, qr);
    if(qr > mid) modify(rs, mid + 1, r, ql, qr);
    push_up(p, l, r);
}

int query(int p, int l, int r, int ql, int qr) {
    if(ql <= l && r <= qr) return t[p].hsh;
    int mid = (l + r) >> 1;
    if(t[p].tag) push_down(p, l, r);
    int res1 = 0, res2 = 0;
    if(ql <= mid) res1 = query(ls, l, mid, ql, qr);
    if(qr > mid) res2 = query(rs, mid + 1, r, ql, qr);
    if(qr > mid) return (1ll * res1 * power[qr - mid] % mod + res2) % mod;
    else return res1;
}

void solve() {
    cin >> n >> q;
    rep(i, 1, n) cin >> a[i];
    power[0] = 1;
    rep(i, 1, n) power[i] = 1ll * power[i - 1] * base % mod;
    sum[0] = 1;
    rep(i, 1, n) sum[i] = (sum[i - 1] + power[i]) % mod;
    build(1, 1, n);
    while(q --) {
        int op, x, y, k;
        cin >> op >> x >> y;
        if(op == 1) modify(1, 1, n, x, y);
        else {
            cin >> k;
            // cout << query(1, 1, n, x, x + k - 1) << endl;
            // cout << query(1, 1, n, y, y + k - 1) << "!" << endl;
            cout << (query(1, 1, n, x, x + k - 1) == query(1, 1, n, y, y + k - 1) ? "yes\n" : "no\n");
        }
    }
}

int main() {
    ios :: sync_with_stdio(false);
    cin.tie(0);
    int T = 1;
    while(T --) solve();
    return 0;
}
/*
 3 3
 0 65535 65535
 2 1 2 2
 1 2 3
 2 1 2 2
*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 9852kb

input:

5 6
1 2 1 2 1
2 1 2 2
2 1 3 3
1 1 1
1 3 5
2 1 2 4
2 1 2 2

output:

no
yes
no
yes

result:

ok 4 token(s): yes count is 2, no count is 2

Test #2:

score: 0
Accepted
time: 2ms
memory: 9724kb

input:

3 3
0 65535 65535
2 1 2 2
1 2 3
2 1 2 2

output:

no
yes

result:

ok 2 token(s): yes count is 1, no count is 1

Test #3:

score: 0
Accepted
time: 2ms
memory: 9740kb

input:

1000 1000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

output:

yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
...

result:

ok 1000 token(s): yes count is 1000, no count is 0

Test #4:

score: 0
Accepted
time: 86ms
memory: 12292kb

input:

100000 100000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

output:

yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
...

result:

ok 100000 token(s): yes count is 100000, no count is 0

Test #5:

score: 0
Accepted
time: 649ms
memory: 22352kb

input:

500000 500000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

output:

yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
...

result:

ok 500000 token(s): yes count is 500000, no count is 0

Test #6:

score: 0
Accepted
time: 571ms
memory: 23340kb

input:

500000 500000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

output:

yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
...

result:

ok 500000 token(s): yes count is 500000, no count is 0

Test #7:

score: -100
Wrong Answer
time: 569ms
memory: 23104kb

input:

500000 500000
65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 6553...

output:

no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
yes
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
yes
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
no
n...

result:

wrong answer expected YES, found NO [1st token]