結果

問題 No.2500 Products in a Range
ユーザー 👑 chro_96chro_96
提出日時 2023-10-13 22:07:24
言語 C
(gcc 12.3.0)
結果
AC  
実行時間 30 ms / 2,000 ms
コード長 3,009 bytes
コンパイル時間 768 ms
コンパイル使用メモリ 30,812 KB
実行使用メモリ 4,356 KB
最終ジャッジ日時 2023-10-13 22:07:32
合計ジャッジ時間 3,143 ms
ジャッジサーバーID
(参考情報)
judge15 / judge14
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 0 ms
4,348 KB
testcase_01 AC 1 ms
4,348 KB
testcase_02 AC 1 ms
4,352 KB
testcase_03 AC 1 ms
4,352 KB
testcase_04 AC 1 ms
4,348 KB
testcase_05 AC 1 ms
4,348 KB
testcase_06 AC 1 ms
4,352 KB
testcase_07 AC 3 ms
4,348 KB
testcase_08 AC 20 ms
4,348 KB
testcase_09 AC 1 ms
4,352 KB
testcase_10 AC 7 ms
4,352 KB
testcase_11 AC 9 ms
4,348 KB
testcase_12 AC 4 ms
4,352 KB
testcase_13 AC 1 ms
4,348 KB
testcase_14 AC 14 ms
4,352 KB
testcase_15 AC 1 ms
4,356 KB
testcase_16 AC 22 ms
4,348 KB
testcase_17 AC 11 ms
4,348 KB
testcase_18 AC 12 ms
4,352 KB
testcase_19 AC 26 ms
4,348 KB
testcase_20 AC 25 ms
4,348 KB
testcase_21 AC 2 ms
4,348 KB
testcase_22 AC 26 ms
4,352 KB
testcase_23 AC 26 ms
4,352 KB
testcase_24 AC 26 ms
4,352 KB
testcase_25 AC 12 ms
4,352 KB
testcase_26 AC 12 ms
4,352 KB
testcase_27 AC 13 ms
4,352 KB
testcase_28 AC 25 ms
4,348 KB
testcase_29 AC 6 ms
4,348 KB
testcase_30 AC 5 ms
4,352 KB
testcase_31 AC 1 ms
4,348 KB
testcase_32 AC 2 ms
4,348 KB
testcase_33 AC 4 ms
4,352 KB
testcase_34 AC 8 ms
4,348 KB
testcase_35 AC 0 ms
4,348 KB
testcase_36 AC 0 ms
4,352 KB
testcase_37 AC 0 ms
4,352 KB
testcase_38 AC 0 ms
4,348 KB
testcase_39 AC 0 ms
4,352 KB
testcase_40 AC 1 ms
4,352 KB
testcase_41 AC 1 ms
4,352 KB
testcase_42 AC 1 ms
4,348 KB
testcase_43 AC 1 ms
4,348 KB
testcase_44 AC 2 ms
4,348 KB
testcase_45 AC 2 ms
4,352 KB
testcase_46 AC 9 ms
4,348 KB
testcase_47 AC 12 ms
4,348 KB
testcase_48 AC 1 ms
4,348 KB
testcase_49 AC 1 ms
4,352 KB
testcase_50 AC 11 ms
4,352 KB
testcase_51 AC 11 ms
4,348 KB
testcase_52 AC 25 ms
4,348 KB
testcase_53 AC 4 ms
4,352 KB
testcase_54 AC 1 ms
4,348 KB
testcase_55 AC 9 ms
4,348 KB
testcase_56 AC 11 ms
4,348 KB
testcase_57 AC 21 ms
4,348 KB
testcase_58 AC 4 ms
4,348 KB
testcase_59 AC 30 ms
4,348 KB
testcase_60 AC 2 ms
4,348 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <stdio.h>
#include <stdlib.h>

int cmp_ll (const void *ap, const void *bp) {
  long long a = *(long long *)ap;
  long long b = *(long long *)bp;
  
  if (a < b) {
    return -1;
  }
  
  if (a > b) {
    return 1;
  }
  
  return 0;
}

int main () {
  int n = 0;
  long long l = 0LL;
  long long r = 0LL;
  long long a[5000] = {};
  
  int res = 0;
  
  int ans = 1;
  long long tl[5000] = {};
  long long tr[5000] = {};
  
  res = scanf("%d", &n);
  res = scanf("%lld", &l);
  res = scanf("%lld", &r);
  for (int i = 0; i < n; i++) {
    res = scanf("%lld", a+i);
  }
  
  qsort(a, n, sizeof(long long), cmp_ll);
  
  for (int i = 0; i < n; i++) {
    if (a[i] < 0LL) {
      long long tmp[2] = { -1000000001LL, 1000000001LL };
      while (tmp[1]-tmp[0] > 1LL) {
        long long nxt = (tmp[0]+tmp[1])/2LL;
        if (nxt*a[i] >= l) {
          tmp[0] = nxt;
        } else {
          tmp[1] = nxt;
        }
      }
      tl[i] = tmp[0];
      tmp[0] = -1000000001LL;
      tmp[1] = 1000000001LL;
      while (tmp[1]-tmp[0] > 1LL) {
        long long nxt = (tmp[0]+tmp[1])/2LL;
        if (nxt*a[i] <= r) {
          tmp[1] = nxt;
        } else {
          tmp[0] = nxt;
        }
      }
      tr[i] = tmp[1];
    } else {
      long long tmp[2] = { -1000000001LL, 1000000001LL };
      while (tmp[1]-tmp[0] > 1LL) {
        long long nxt = (tmp[0]+tmp[1])/2LL;
        if (nxt*a[i] >= l) {
          tmp[1] = nxt;
        } else {
          tmp[0] = nxt;
        }
      }
      tl[i] = tmp[1];
      tmp[0] = -1000000001LL;
      tmp[1] = 1000000001LL;
      while (tmp[1]-tmp[0] > 1LL) {
        long long nxt = (tmp[0]+tmp[1])/2LL;
        if (nxt*a[i] <= r) {
          tmp[0] = nxt;
        } else {
          tmp[1] = nxt;
        }
      }
      tr[i] = tmp[0];
    }
  }
  
  for (int i = 0; i < n-1; i++) {
    for (int j = i+1; j < n; j++) {
      if (ans < 2 && a[i]*a[j] >= l && a[i]*a[j] <= r) {
        ans = 2;
      }
      if (j-i+1 >= ans && a[i]*a[i+1] >= l && a[i]*a[i+1] <= r && a[i]*a[j] >= l && a[i]*a[j] <= r && a[j]*a[j-1] >= l && a[j]*a[j-1] <= r) {
        long long cl = tl[i];
        long long cr = tr[i];
        int idx[2] = { -1, i };
        ans = j-i+1;
        if (cr > tr[j]) {
          cr = tr[j];
        }
        if (cl < tl[j]) {
          cl = tl[j];
        }
        while (idx[1]-idx[0] > 1) {
          int nxt = (idx[0]+idx[1])/2;
          if (a[nxt] < cl) {
            idx[0] = nxt;
          } else {
            idx[1] = nxt;
          }
        }
        if (idx[1] < i && a[idx[1]] >= cl && a[idx[1]] <= cr) {
          ans = j-i+2;
        }
        idx[0] = j;
        idx[1] = n;
        while (idx[1]-idx[0] > 1) {
          int nxt = (idx[0]+idx[1])/2;
          if (a[nxt] < cl) {
            idx[0] = nxt;
          } else {
            idx[1] = nxt;
          }
        }
        if (idx[1] < n && a[idx[1]] >= cl && a[idx[1]] <= cr) {
          ans = j-i+2;
        }
      }
    }
  }
  
  printf("%d\n", ans);
  return 0;
}
0