QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#108214#6405. BarkleywsyearTL 172ms20572kbC++172.2kb2023-05-23 21:38:322023-05-23 21:41:12

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-05-23 21:41:12]
  • 评测
  • 测评结果:TL
  • 用时:172ms
  • 内存:20572kb
  • [2023-05-23 21:38:32]
  • 提交

answer

#include <bits/stdc++.h>
#ifdef dbg
#define D(...) fprintf(stderr, __VA_ARGS__)
#define DD(...) D(#__VA_ARGS__ " = "), debug_helper::debug(__VA_ARGS__), D("\n")
#include "C:\Users\wsyear\Desktop\OI\templates\debug.hpp"
#else
#define D(...) ((void)0)
#define DD(...) ((void)0)
#endif
#define rep(i, j, k) for (int i = (j); i <= (k); ++i)
#define per(i, j, k) for (int i = (j); i >= (k); --i)
#define SZ(v) int((v).size())
#define ALL(v) (v).begin(),(v).end()
#define fi first
#define se second
#define gc getchar
#define pc putchar
using ll = long long;
using pii = std::pair<int, int>;
using pll = std::pair<ll, ll>;

using namespace std;

template <class T = int> T read() {
  T x = 0; bool f = 0; char ch = gc();
  while (!isdigit(ch)) f = ch == '-', ch = gc();
  while (isdigit(ch)) x = (x << 3) + (x << 1) + (ch ^ 48), ch = gc();
  return f ? -x: x;
}
template <class T> void write(T x) {
  if (x >= 0) { if (x > 9) write(x / 10); pc(x % 10 + 48); }
  else { pc('-'); if (x < -9) write(-x / 10); pc(48 - x % 10); }
}

const int N = 100010;

int n, q;
ll a[N], st[N][21], ans;

ll qry(int l, int r) {
  int k = __lg(r - l + 1);
  return gcd(st[l][k], st[r - (1 << k) + 1][k]);
}

bool check(int l, int r, ll d) {
  int k = __lg(r - l + 1);
  return (st[l][k] % d == 0) && (st[r - (1 << k) + 1][k] % d == 0);
}

void solve(int l, int r, int k, ll d) {
  if (k == 0 && l > r) return ans = max(ans, d), void();
  if (r - l + 1 < k) return;
  if (k == 0) {
    d = gcd(d, qry(l, r));
    return ans = max(ans, d), void();
  }
  solve(l + 1, r, k - 1, d), d = gcd(d, a[l]);
  for (int x = l, y; x <= r; x = y + 1) {
    y = x;
    per (i, 20, 0) {
      if (y + (1 << i) > r) continue;
      if (!check(x, y + (1 << i), d)) continue;
      y += (1 << i);
    }
    solve(y + 1, r, k, d);
    d = gcd(d, a[y + 1]);
  }
}

int main() {
  n = read(), q = read();
  rep (i, 1, n) a[i] = read<ll>();
  rep (i, 1, n) st[i][0] = a[i];
  rep (j, 1, 20) rep (i, 1, n - (1 << j) + 1)
    st[i][j] = gcd(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
  while (q--) {
    int l = read(), r = read(), k = read();
    ans = 0, solve(l, r, k, 0);
    write(ans), pc(10);
  }
}

詳細信息

Test #1:

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

input:

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

output:

3
2
3
6

result:

ok 4 number(s): "3 2 3 6"

Test #2:

score: 0
Accepted
time: 5ms
memory: 3640kb

input:

100 10000
7 25 33 17 13 33 24 29 11 1 3 19 2 20 33 23 14 24 15 12 3 1 5 13 6 35 15 21 10 34 31 19 7 33 17 26 26 1 19 21 31 5 29 20 18 32 19 18 19 31 11 26 6 19 2 26 23 1 4 2 31 21 29 30 1 14 20 23 14 32 4 34 13 29 5 26 24 29 28 5 26 26 21 19 2 33 2 31 30 3 23 24 26 32 36 21 21 11 5 9
56 57 1
90 97 1...

output:

26
1
1
1
1
1
1
1
31
1
1
1
1
1
26
1
1
1
1
1
1
29
1
1
1
1
1
1
4
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
2
1
1
1
21
1
1
1
1
1
19
1
1
1
21
1
1
1
1
1
1
1
1
1
1
1
1
1
3
1
1
1
1
1
1
1
1
1
1
4
1
1
1
1
1
3
1
2
1
26
1
1
1
1
1
1
1
7
1
1
1
33
1
1
1
1
1
1
2
1
26
1
1
1
2
1
1
1
1
1
1
26
1
1
1
1
31
1
1
2
1
4
29
1
2
1
1...

result:

ok 10000 numbers

Test #3:

score: 0
Accepted
time: 23ms
memory: 3624kb

input:

1000 66666
25 21 18 19 9 34 16 7 36 2 8 10 25 15 34 9 1 34 6 19 20 20 1 16 10 6 10 1 30 34 6 15 15 11 9 4 34 36 27 17 2 2 19 10 4 22 15 16 22 36 27 26 20 23 29 16 27 14 3 31 32 16 5 5 31 13 27 5 17 23 20 19 13 22 30 14 25 13 7 16 10 6 1 6 3 5 36 1 33 22 31 26 28 3 14 14 2 31 35 7 19 30 36 5 3 14 14 ...

output:

1
2
1
1
1
1
1
1
1
1
1
3
1
2
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
17
1
1
1
20
1
1
1
7
1
1
1
1
1
1
1
1
3
1
1
1
1
1
1
7
1
2
15
1
3
1
2
1
1
3
4
1
1
1
1
1
31
1
1
1
2
1
1
1
1
27
3
1
1
1
1
4
10
1
1
1
1
17
1
1
1
2
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
8
1
1
17
1
2
1
1
1
30
1
25
1
35
1...

result:

ok 66666 numbers

Test #4:

score: 0
Accepted
time: 32ms
memory: 5100kb

input:

10000 66666
35 30 29 34 3 25 23 29 30 32 34 1 25 1 23 11 10 24 33 25 14 1 16 25 33 5 19 2 16 1 19 14 34 6 26 25 36 35 1 32 35 27 18 3 7 16 10 25 6 21 36 31 24 17 20 12 30 21 25 31 27 22 5 19 6 16 7 26 15 21 32 11 34 4 7 25 34 3 14 13 10 1 28 8 12 24 34 27 17 8 17 32 23 30 23 8 19 22 2 11 23 10 4 30 ...

output:

1
16
2
2
1
23
1
1
1
2
1
3
5
1
1
2
1
1
1
1
30
1
1
1
3
18
1
1
1
1
2
1
1
1
1
1
1
1
1
2
2
1
6
36
1
1
2
19
2
1
1
1
1
1
2
1
1
1
21
1
1
1
1
3
1
1
1
1
1
1
1
1
1
1
1
1
29
1
1
30
2
2
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
2
1
1
1
2
29
1
1
14
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
2
3
1
9
5
1
2
2
1
32
1
1
1
3
2
1
1
...

result:

ok 66666 numbers

Test #5:

score: 0
Accepted
time: 66ms
memory: 20560kb

input:

100000 66666
7 27 21 15 35 19 32 8 1 30 6 3 33 29 25 5 1 24 34 9 13 27 9 32 20 26 5 10 1 30 29 15 11 31 12 27 10 32 14 30 27 6 16 17 16 36 12 35 18 4 14 9 12 33 1 10 27 31 16 27 16 15 6 16 28 16 26 6 25 23 23 31 22 16 30 33 15 2 27 11 18 23 3 2 23 2 13 17 21 15 4 2 19 22 35 35 13 28 9 30 20 29 17 5 ...

output:

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
2
1
1
7
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
29
1
1
1
1
1
1
1
1
1
1
1
35
3
1
1
20
1
1
1
1
1
1
1
1
1
2
1
1
2
1
1
19
1
1
1
1
1
1
1
1
1
1
1
1
1
1
25
1
1
1
1
1
1
2
13
1
9
25
1
1
1
1
1
1
1
1
2
1
1
1
25
1
18
4
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
23
1
1
1
1
1
33
2...

result:

ok 66666 numbers

Test #6:

score: 0
Accepted
time: 172ms
memory: 20572kb

input:

100000 66666
450283905890997363 450283905890997363 450283905890997363 450283905890997363 450283905890997363 450283905890997363 450283905890997363 450283905890997363 450283905890997363 450283905890997363 450283905890997363 450283905890997363 450283905890997363 450283905890997363 450283905890997363 45...

output:

450283905890997363
450283905890997363
450283905890997363
450283905890997363
450283905890997363
450283905890997363
450283905890997363
450283905890997363
450283905890997363
450283905890997363
450283905890997363
450283905890997363
450283905890997363
450283905890997363
450283905890997363
450283905890997...

result:

ok 66666 numbers

Test #7:

score: -100
Time Limit Exceeded

input:

100000 66666
701982420492091392 592297667290202112 789730223053602816 369768517790072832 526486815369068544 562220051373121536 701982420492091392 701982420492091392 444223250467651584 592297667290202112 554652776685109248 888446500935303168 623984373770747904 888446500935303168 888446500935303168 55...

output:

9795520512
9795520512
352638738432
9795520512
29386561536
39182082048
117546246144
9795520512
19591041024
9795520512
29386561536
352638738432
176319369216
9795520512
9795520512
58773123072
176319369216
29386561536
9795520512
9795520512
117546246144
29386561536
9795520512
58773123072
117546246144
117...

result: