UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#215236#2726. 8.3t4nodgd100210ms4412kbC++112.1kb2024-11-27 19:44:062024-11-27 23:36:47

answer

#include <bits/stdc++.h>

using namespace std;

const int BUFFER_SIZE = 1 << 20;
char rb[BUFFER_SIZE], *rp = rb, *rt = rb;
inline char read_char() {
    return rp == rt ? (rt = rb + fread(rb, 1, BUFFER_SIZE, stdin), rp = rb, *rp ++) : *rp ++;
}
inline int read_int() {
    int x = 0;
    char ch = read_char(), flag = 0;
    while (ch != '-' && (ch < '0' || ch > '9')) {
        ch = read_char();
    }
    if (ch == '-') {
        flag = 1;
        ch = read_char();
    }
    for (x = 0; ch >= '0' && ch <= '9'; ch = read_char()) {
        x = x * 10 + (ch - '0');
    }
    return flag ? -x : x;
}

char wb[BUFFER_SIZE], *wp = wb;
inline void write_flush() {
    fwrite(wb, 1, wp - wb, stdout);
    wp = wb;
}
inline void write_char(char c) {
    *wp ++ = c;
    if (wp == wb + BUFFER_SIZE) {
        write_flush();
    }
}
inline void write_int(int x) {
    if (x == 0) {
        write_char('0');
    } else if (x < 0) {
        write_char('-');
        x = -x;
    }
    static char b[32], i;
    for (i = 1; x; i ++) {
        b[i] = x % 10 + '0';
        x /= 10;
    }
    for (i --; i; i --) {
        write_char(b[i]);
    }
}

const int MAX_N = 100000 + 5;
const int K = 300;

int N, M;
int a[MAX_N], ans[MAX_N];
vector<pair<int,int>> qi[K + 5];
int f[MAX_N];

int main() {
    N = read_int();
    for (int i = 1; i <= N; i ++) {
        a[i] = read_int();
    }
    M = read_int();
    for (int i = 1; i <= M; i ++) {
        int p = read_int(), k = read_int();
        if (k <= K) {
            qi[k].push_back(make_pair(i, p));
        } else {
            for (; p <= N; p += a[p] + k) ans[i] ++;
        }
    }
    for (int k = 0; k <= K; k ++) {
        if (qi[k].empty()) continue;
        for (int i = N; i >= 1; i --) {
            int j = i + a[i] + k;
            f[i] = j > N ? 1 : f[j] + 1;
        }
        for (auto t: qi[k]) {
            ans[t.first] = f[t.second];
        }
    }
    for (int i = 1; i <= M; i ++) {
        write_int(ans[i]), write_char('\n');
    }
    write_flush();
    return 0;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 0ms
memory: 1188kb

input:

100
5 6 12 22 23 21 22 7 30 5 22 22 29 30 30 10 7 17 25 24 1 16 17 30 3 19 7 27 14 20 28 5 22 23 13 ...

output:

3
7
5
3
2
2
3
4
3
3
4
3
3
4
5
4
2
5
2
5
5
3
4
5
3
3
4
5
4
2
2
2
4
3
2
6
2
5
3
4
2
3
3
2
2
3
2
2
3
3
...

result:

ok 100 lines

Test #2:

score: 10
Accepted
time: 3ms
memory: 4260kb

input:

100000
25 29 13 9 17 27 2 5 20 4 27 25 5 24 17 13 13 14 3 13 4 24 19 9 21 20 14 17 9 11 13 9 5 24 20...

output:

6391
6391
6393
6386
6388
6393
6391
6393
6391
6392
6392
6390
6392
6392
6318
6395
6394
6389
6389
6390
...

result:

ok 100000 lines

Test #3:

score: 10
Accepted
time: 3ms
memory: 4260kb

input:

100000
16 18 28 7 16 2 30 19 30 28 17 8 8 16 16 3 11 19 29 7 9 27 6 27 27 28 29 3 18 27 5 29 14 15 2...

output:

6477
6480
6475
6477
6475
6476
6478
6478
6319
6477
6479
6479
6479
6375
6353
6349
6476
6480
6480
6474
...

result:

ok 100000 lines

Test #4:

score: 10
Accepted
time: 6ms
memory: 4260kb

input:

100000
29 30 15 26 1 29 1 4 12 22 12 4 9 27 20 29 21 8 29 27 11 5 13 7 20 15 5 15 10 1 30 28 10 30 3...

output:

6475
6475
6472
6468
6473
6469
6472
6473
6472
6478
6469
6469
6476
6470
6474
6473
6470
6469
6470
6475
...

result:

ok 100000 lines

Test #5:

score: 10
Accepted
time: 0ms
memory: 4260kb

input:

100000
30 25 29 4 13 25 14 15 21 20 8 4 17 16 13 8 10 17 21 10 14 13 9 26 28 14 28 13 29 10 28 2 3 1...

output:

6484
6483
6481
6487
6483
6487
6480
6484
6484
6483
6482
6486
6486
6374
6483
6484
6480
6483
6480
6482
...

result:

ok 100000 lines

Test #6:

score: 10
Accepted
time: 39ms
memory: 4164kb

input:

100000
3 1 9 1 7 6 10 9 5 10 6 5 5 8 2 8 10 1 9 4 4 3 6 3 1 9 5 2 7 8 1 3 8 6 1 8 3 1 1 10 8 4 2 8 5...

output:

15308
13281
11724
10574
9488
8665
8036
7431
6893
6485
6049
5722
5409
5128
4872
4655
4441
4242
4085
3...

result:

ok 100000 lines

Test #7:

score: 10
Accepted
time: 39ms
memory: 4236kb

input:

100000
19 6 20 1 19 14 23 14 23 3 9 1 14 19 22 21 4 26 2 20 16 9 27 20 23 2 19 5 13 18 6 11 17 13 9 ...

output:

6114
5717
5377
5141
4930
4672
4418
4263
4061
3903
3782
3655
3495
3376
3278
3161
3065
2986
2897
2793
...

result:

ok 100000 lines

Test #8:

score: 10
Accepted
time: 42ms
memory: 4412kb

input:

100000
3 16 18 2 10 29 27 26 12 11 15 12 29 16 2 8 14 4 28 13 21 13 2 24 4 9 16 14 4 27 27 15 18 13 ...

output:

6080
5669
5408
5099
4853
4700
4382
4228
4073
3908
3757
3632
3491
3369
3273
3181
3049
2989
2913
2818
...

result:

ok 100000 lines

Test #9:

score: 10
Accepted
time: 39ms
memory: 4176kb

input:

100000
82 65 27 36 67 74 9 74 35 72 97 28 57 78 88 66 89 20 30 50 2 1 19 8 97 4 47 37 6 73 22 31 64 ...

output:

1926
1906
1818
1831
1806
1746
1765
1700
1691
1623
1624
1621
1575
1549
1524
1505
1442
1471
1430
1424
...

result:

ok 100000 lines

Test #10:

score: 10
Accepted
time: 39ms
memory: 4148kb

input:

100000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1...

output:

50000
33333
25000
20000
16667
14286
12500
11112
10000
9091
8334
7693
7143
6667
6250
5883
5556
5264
5...

result:

ok 100000 lines