| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 | 
|---|---|---|---|---|---|---|---|
| 642917 | valerikk | Worst Reporter 3 (JOI18_worst_reporter3) | C++17 | 663 ms | 23192 KiB | 
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <cstdio>
#define MAXN 500005
#define MAXT 1000000001
#define MAXK 65
int N, Q;
int D[MAXN];
int W[MAXN], C[MAXN], S[MAXN];
int Z[MAXK], K;
int count(int T, int L) {
  if (T < L)
    return 0;
  for (int i = 0, t = T; i < K; ++i) {
    S[i] = t % C[Z[i]] * W[Z[i]];
    t /= C[Z[i]];
  }
  int low = 0, high = N + 1;
  while (high - low > 1) {
    int mid = (low + high) / 2;
    int X = T - mid;
    for (int i = 0; i < K && Z[i] <= mid; ++i) {
      X -= S[i];
    }
    if (X >= L) 
      low = mid;
    else
      high = mid;
  }
  
  return low + 1;
}
int main() {
  scanf("%d%d", &N, &Q);
  for (int i = 1; i <= N; ++i) {
    scanf("%d", &D[i]);
  }
  W[1] = 1;
  C[1] = D[1];
  for (int i = 2; i <= N; ++i) {
    if (MAXT / C[i - 1] < W[i - 1])
      W[i] = MAXT;
    else
      W[i] = C[i - 1] * W[i - 1];
    
    C[i] = (D[i] + W[i] - 1) / W[i];
    if (C[i] > MAXT)
      C[i] = MAXT;
  }
  for (int i = 1; i <= N; ++i) {
    if (C[i] != 1) 
      Z[K++] = i;
  }
  while (Q--) {
    int T, L, R;
    scanf("%d%d%d", &T, &L, &R);
    printf("%d\n", count(T, L) - count(T, R + 1));
  }
}
컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
