답안 #898152

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
898152 2024-01-04T10:59:15 Z vjudge1 Hedgehog Daniyar and Algorithms (IZhO19_sortbooks) C++17
64 / 100
3000 ms 187012 KB
#include <bits/stdc++.h>
using namespace std;

#define all(x) x.begin(), x.end()
#define tp3 tuple<int, int, int>

const int N = 1e6, L = 20, inf = INT_MAX;

int n, m, a[N], b[N], seg[N*4], lg[N], st[L][N];
vector<int> lf[N];
vector<tp3> q[N];
bitset<N> ans;

void build(int p=1, int l=0, int r=n-1) {
  if (l == r) {
    seg[p] = (b[l] == -1 ? 0 : (a[l] + a[b[l]]));
    return;
  }

  int mid = (l+r) >> 1;
  build(p*2, l, mid);
  build(p*2+1, mid+1, r); 

  seg[p] = max(seg[p*2], seg[p*2+1]);
}

void update(int x, int p=1, int l=0, int r=n-1) {
  if (l == r) {
    seg[p] = 0;
    return;
  }

  int mid = (l+r) >> 1;
  if (x <= mid) update(x, p*2, l, mid);
  else update(x, p*2+1, mid+1, r); 

  seg[p] = max(seg[p*2], seg[p*2+1]);
}

int query(int x, int y, int p=1, int l=0, int r=n-1) {
  if (x <= l && r <= y) {
    return seg[p];
  }

  int mid = (l+r) >> 1;
  if (y <= mid) {
    return query(x, y, p*2, l, mid);
  }
  else if(mid+1 <= x) {
    return query(x, y, p*2+1, mid+1, r);
  }
  else {
    return max(query(x, y, p*2, l, mid), query(x, y, p*2+1, mid+1, r));
  }
}

int querySt(int l, int r) {
  int x = lg[r-l+1];
  return max(st[x][l], st[x][r - (1 << x) + 1]);
}

signed main() {
  ios::sync_with_stdio(false); cin.tie(nullptr);

  lg[1] = 0;
  for (int i = 2; i < N; i++) {
    lg[i] = lg[i >> 1] + 1;
  }

  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    st[0][i] = a[i];
  }

  for (int i = 0; i < m; i++) {
    int l, r, k;
    cin >> l >> r >> k;
    l--; r--;
    q[l].push_back(make_tuple(r, k, i));
  }

  for (int j = 1; j < L; j++) {
    for (int i = 0; i < n; i++) {
      st[j][i] = max(st[j-1][i], st[j-1][i + (1 << (j-1))]);
    }
  }

  for (int i = 0; i < n; i++) {
    int l = -1;
    int r = i-1;
    while (l < r) {
      int mid = (l+r+1)/2;

      int x = querySt(mid, i-1);
      if (x > a[i]) l = mid;
      else r = mid-1;
    }
    b[i] = l;
    lf[b[i]].push_back(i);
  }

  build();
  for (int l = 0; l < n; l++) {
    for (auto& [r, k, idx] : q[l]) {
      ans[idx] = (query(l, r) <= k);
    }

    for (int& i : lf[l]) {
      update(i);
    }
  }

  for (int i = 0; i < m; i++) {
    cout << ans[i] << "\n";
  }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 94812 KB Output is correct
2 Correct 16 ms 94812 KB Output is correct
3 Correct 16 ms 94812 KB Output is correct
4 Correct 16 ms 95184 KB Output is correct
5 Correct 16 ms 94808 KB Output is correct
6 Correct 17 ms 94812 KB Output is correct
7 Correct 17 ms 94812 KB Output is correct
8 Correct 16 ms 94780 KB Output is correct
9 Correct 16 ms 94932 KB Output is correct
10 Correct 16 ms 95064 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 94812 KB Output is correct
2 Correct 16 ms 94812 KB Output is correct
3 Correct 16 ms 94812 KB Output is correct
4 Correct 16 ms 95184 KB Output is correct
5 Correct 16 ms 94808 KB Output is correct
6 Correct 17 ms 94812 KB Output is correct
7 Correct 17 ms 94812 KB Output is correct
8 Correct 16 ms 94780 KB Output is correct
9 Correct 16 ms 94932 KB Output is correct
10 Correct 16 ms 95064 KB Output is correct
11 Correct 17 ms 94928 KB Output is correct
12 Correct 18 ms 94812 KB Output is correct
13 Correct 21 ms 95068 KB Output is correct
14 Correct 19 ms 95068 KB Output is correct
15 Correct 20 ms 95068 KB Output is correct
16 Correct 19 ms 95068 KB Output is correct
17 Correct 18 ms 94812 KB Output is correct
18 Correct 19 ms 95068 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1090 ms 186840 KB Output is correct
2 Correct 1072 ms 186764 KB Output is correct
3 Correct 1083 ms 187012 KB Output is correct
4 Correct 1053 ms 186752 KB Output is correct
5 Execution timed out 3035 ms 172984 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 97 ms 107092 KB Output is correct
2 Correct 88 ms 108484 KB Output is correct
3 Correct 78 ms 107728 KB Output is correct
4 Correct 79 ms 107976 KB Output is correct
5 Correct 85 ms 107980 KB Output is correct
6 Correct 67 ms 107216 KB Output is correct
7 Correct 67 ms 107228 KB Output is correct
8 Correct 78 ms 107356 KB Output is correct
9 Correct 42 ms 97776 KB Output is correct
10 Correct 81 ms 107428 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 94812 KB Output is correct
2 Correct 16 ms 94812 KB Output is correct
3 Correct 16 ms 94812 KB Output is correct
4 Correct 16 ms 95184 KB Output is correct
5 Correct 16 ms 94808 KB Output is correct
6 Correct 17 ms 94812 KB Output is correct
7 Correct 17 ms 94812 KB Output is correct
8 Correct 16 ms 94780 KB Output is correct
9 Correct 16 ms 94932 KB Output is correct
10 Correct 16 ms 95064 KB Output is correct
11 Correct 17 ms 94928 KB Output is correct
12 Correct 18 ms 94812 KB Output is correct
13 Correct 21 ms 95068 KB Output is correct
14 Correct 19 ms 95068 KB Output is correct
15 Correct 20 ms 95068 KB Output is correct
16 Correct 19 ms 95068 KB Output is correct
17 Correct 18 ms 94812 KB Output is correct
18 Correct 19 ms 95068 KB Output is correct
19 Correct 188 ms 119376 KB Output is correct
20 Correct 196 ms 126036 KB Output is correct
21 Correct 183 ms 124904 KB Output is correct
22 Correct 174 ms 124900 KB Output is correct
23 Correct 173 ms 124836 KB Output is correct
24 Correct 140 ms 122776 KB Output is correct
25 Correct 137 ms 122736 KB Output is correct
26 Correct 149 ms 123076 KB Output is correct
27 Correct 162 ms 123244 KB Output is correct
28 Correct 154 ms 123084 KB Output is correct
29 Correct 158 ms 123736 KB Output is correct
30 Correct 170 ms 124064 KB Output is correct
31 Correct 157 ms 123584 KB Output is correct
32 Correct 159 ms 123588 KB Output is correct
33 Correct 165 ms 123588 KB Output is correct
34 Correct 133 ms 122056 KB Output is correct
35 Correct 129 ms 122048 KB Output is correct
36 Correct 129 ms 121796 KB Output is correct
37 Correct 129 ms 121848 KB Output is correct
38 Correct 130 ms 122032 KB Output is correct
39 Correct 146 ms 122212 KB Output is correct
40 Correct 124 ms 114424 KB Output is correct
41 Correct 148 ms 121120 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 94812 KB Output is correct
2 Correct 16 ms 94812 KB Output is correct
3 Correct 16 ms 94812 KB Output is correct
4 Correct 16 ms 95184 KB Output is correct
5 Correct 16 ms 94808 KB Output is correct
6 Correct 17 ms 94812 KB Output is correct
7 Correct 17 ms 94812 KB Output is correct
8 Correct 16 ms 94780 KB Output is correct
9 Correct 16 ms 94932 KB Output is correct
10 Correct 16 ms 95064 KB Output is correct
11 Correct 17 ms 94928 KB Output is correct
12 Correct 18 ms 94812 KB Output is correct
13 Correct 21 ms 95068 KB Output is correct
14 Correct 19 ms 95068 KB Output is correct
15 Correct 20 ms 95068 KB Output is correct
16 Correct 19 ms 95068 KB Output is correct
17 Correct 18 ms 94812 KB Output is correct
18 Correct 19 ms 95068 KB Output is correct
19 Correct 1090 ms 186840 KB Output is correct
20 Correct 1072 ms 186764 KB Output is correct
21 Correct 1083 ms 187012 KB Output is correct
22 Correct 1053 ms 186752 KB Output is correct
23 Execution timed out 3035 ms 172984 KB Time limit exceeded
24 Halted 0 ms 0 KB -