結果
問題 | No.504 ゲーム大会(ランキング) |
ユーザー | xxxxxxxxxxxxxxxxxxxx |
提出日時 | 2017-04-21 22:47:25 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 1,013 ms / 2,000 ms |
コード長 | 9,788 bytes |
コンパイル時間 | 2,689 ms |
コンパイル使用メモリ | 84,816 KB |
実行使用メモリ | 57,368 KB |
最終ジャッジ日時 | 2024-07-20 05:37:07 |
合計ジャッジ時間 | 12,050 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 118 ms
41,324 KB |
testcase_01 | AC | 107 ms
39,924 KB |
testcase_02 | AC | 120 ms
41,136 KB |
testcase_03 | AC | 120 ms
40,916 KB |
testcase_04 | AC | 116 ms
41,120 KB |
testcase_05 | AC | 116 ms
40,800 KB |
testcase_06 | AC | 120 ms
41,392 KB |
testcase_07 | AC | 920 ms
54,660 KB |
testcase_08 | AC | 964 ms
57,368 KB |
testcase_09 | AC | 946 ms
55,100 KB |
testcase_10 | AC | 1,013 ms
55,592 KB |
testcase_11 | AC | 925 ms
57,048 KB |
testcase_12 | AC | 884 ms
56,336 KB |
testcase_13 | AC | 922 ms
55,044 KB |
testcase_14 | AC | 967 ms
55,340 KB |
ソースコード
import java.io.IOException;import java.io.InputStream;import java.util.*;import java.util.function.BiFunction;import java.util.function.Function;import java.util.function.Supplier;public class Main {final static int INF = 1 << 28;final static long MOD = 1_000_000_007;final static double GOLDEN_RATIO = (1.0 + Math.sqrt(5)) / 2.0;Scanner sc = new Scanner(System.in);public static void main(String[] args) {new Main().run();}void run() {int n = ni();int a = ni();System.out.println(1);int cnt = 0;for (int i = 1; i < n; ++i) {int v = ni();if (v > a) {++cnt;}System.out.println(1 + cnt);}}int ni() {return Integer.parseInt(sc.next());}void debug(Object... os) {System.err.println(Arrays.deepToString(os));}/*** ユークリッドの互除法** @return a と b の最大公約数*/long gcd(long a, long b) {if (b == 0) {return a;}return gcd(b, a % b);}/*** 拡張ユークリッドの互除法** @return mx + ny = gcd(m, n)となるような(x, y)を返す*/Pair<Long, Long> gcd_ex(long m, long n) {long[][] mat = _gcd_ex(m, n);return new Pair<>(mat[0][0], mat[0][1]);}long[][] _gcd_ex(long m, long n) {if (n == 0) {return new long[][]{{1, 0}, {0, 1}};}long k = m / n;long[][] K = new long[][]{{0, 1}, {1, -k}};long[][] r = _gcd_ex(n, m % n);long[][] dst = new long[2][2];for (int y = 0; y < 2; ++y)for (int x = 0; x < 2; ++x)for (int i = 0; i < 2; ++i)dst[y][x] += r[y][i] * K[i][x];return dst;}/*** 繰り返し2乗法を用いたべき乗の実装** @return a^r (mod 1,000,000,007)*/long pow(long a, long r) {long sum = 1;while (r > 0) {if ((r & 1) == 1) {sum *= a;sum %= MOD;}a *= a;a %= MOD;r >>= 1;}return sum;}/*** 組み合わせ* O(n)** @return {}_nC_r*/long C(int n, int r) {long sum = 1;for (int i = n; 0 < i; --i) {sum *= i;sum %= MOD;}long s = 1;for (int i = r; 0 < i; --i) {s *= i;s %= MOD;}sum *= pow(s, MOD - 2);sum %= MOD;long t = 1;for (int i = n - r; 0 < i; --i) {t *= i;t %= MOD;}sum *= pow(t, MOD - 2);sum %= MOD;return sum;}/*** 黄金分割探索** @param left 下限* @param right 上限* @param f 探索する関数* @param comp 上に凸な関数を探索するときは、Comparator.comparingDouble(Double::doubleValue)* 下に凸な関数を探索するときは、Comparator.comparingDouble(Double::doubleValue).reversed()* @return 極値の座標x*/double goldenSectionSearch(double left, double right, Function<Double, Double> f, Comparator<Double> comp) {double c1 = divideInternally(left, right, 1, GOLDEN_RATIO);double c2 = divideInternally(left, right, GOLDEN_RATIO, 1);double d1 = f.apply(c1);double d2 = f.apply(c2);while (right - left > 1e-9) {if (comp.compare(d1, d2) > 0) {right = c2;c2 = c1;d2 = d1;c1 = divideInternally(left, right, 1, GOLDEN_RATIO);d1 = f.apply(c1);} else {left = c1;c1 = c2;d1 = d2;c2 = divideInternally(left, right, GOLDEN_RATIO, 1);d2 = f.apply(c2);}}return right;}/*** [a,b]をm:nに内分する点を返す*/double divideInternally(double a, double b, double m, double n) {return (n * a + m * b) / (m + n);}/*** http://alexbowe.com/popcount-permutations/* bitの立っている数が小さい順にループしたいときに使う。* ex)* <pre>* for (int i = 0; i < 25; ++i) {* int bits = (1 << i) - 1;* long m = C(25, num);* for (j = 0; j < m; ++j) {* ...(25個の中からi個bitが立っている)* if (bits != 0)* bits = next_perm(bits);* }* }* </pre>** @param v 現在のbit列* @return 次のbit列*/int next_perm(int v) {int t = (v | (v - 1)) + 1;return t | ((((t & -t) / (v & -v)) >> 1) - 1);}/*** http://qiita.com/p_shiki37/items/65c18f88f4d24b2c528b*/static class FastScanner {private final InputStream in;private final byte[] buffer = new byte[1024];private int ptr = 0;private int buflen = 0;public FastScanner(InputStream in) {this.in = in;}private static boolean isPrintableChar(int c) {return 33 <= c && c <= 126;}private boolean hasNextByte() {if (ptr < buflen) {return true;} else {ptr = 0;try {buflen = in.read(buffer);} catch (IOException e) {e.printStackTrace();}if (buflen <= 0) {return false;}}return true;}private int readByte() {if (hasNextByte()) return buffer[ptr++];else return -1;}private void skipUnprintable() {while (hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++;}public boolean hasNext() {skipUnprintable();return hasNextByte();}public String next() {if (!hasNext()) throw new NoSuchElementException();StringBuilder sb = new StringBuilder();int b = readByte();while (isPrintableChar(b)) {sb.appendCodePoint(b);b = readByte();}return sb.toString();}public long nextLong() {if (!hasNext()) throw new NoSuchElementException();long n = 0;boolean minus = false;int b = readByte();if (b == '-') {minus = true;b = readByte();}if (b < '0' || '9' < b) {throw new NumberFormatException();}while (true) {if ('0' <= b && b <= '9') {n *= 10;n += b - '0';} else if (b == -1 || !isPrintableChar(b)) {return minus ? -n : n;} else {throw new NumberFormatException();}b = readByte();}}}class BIT<T> {int n;ArrayList<T> bit;BiFunction<T, T, T> bif;/*** 1-indexed なBinary Indexed Treeを構築する** @param n 容量* @param bif 適用させる関数* @param sup 初期値*/BIT(int n, BiFunction<T, T, T> bif, Supplier<T> sup) {this.n = n;bit = new ArrayList<>(n + 1);for (int i = 0; i < n + 1; ++i) {bit.add(sup.get());}this.bif = bif;}/*** iの位置の値をvで更新する** @param i index* @param v 新しい値*/void set(int i, T v) {for (int x = i; x <= n; x += x & -x) {bit.set(x, bif.apply(bit.get(x), v));}}/*** クエリー** @param defaultValue 初期値* @param i index* @return [1, i]までfを適用した結果*/T reduce(T defaultValue, int i) {T ret = defaultValue;for (int x = i; x > 0; x -= x & -x) {ret = bif.apply(ret, bit.get(x));}return ret;}}class SegmentTree<T> {int n;ArrayList<T> dat;BiFunction<T, T, T> bif;Supplier<T> sup;/*** 0-indexed なSegment Treeを構築する** @param n_ 要求容量* @param bif 適用させる関数* @param sup 初期値*/SegmentTree(int n_, BiFunction<T, T, T> bif, Supplier<T> sup) {n = 1;while (n < n_) n *= 2;dat = new ArrayList<>(2 * n - 1);for (int i = 0; i < 2 * n - 1; ++i) {dat.add(sup.get());}this.bif = bif;this.sup = sup;}/*** kの位置の値をvで更新する** @param k index* @param v 新しい値*/void set(int k, T v) {k += n - 1;dat.set(k, v);while (k > 0) {k = (k - 1) / 2;dat.set(k, bif.apply(dat.get(k * 2 + 1), dat.get(k * 2 + 2)));}}/*** クエリー** @param l はじめ* @param r おわり* @return [l, r)での演算bifを適用した結果を返す*/T reduce(int l, int r) {return _reduce(l, r, 0, 0, n);}T _reduce(int a, int b, int k, int l, int r) {if (r <= a || b <= l) return sup.get();if (a <= l && r <= b) return dat.get(k);T vl = _reduce(a, b, k * 2 + 1, l, (l + r) / 2);T vr = _reduce(a, b, k * 2 + 2, (l + r) / 2, r);return bif.apply(vl, vr);}}static class Pair<F extends Comparable<F>, S extends Comparable<S>> implements Comparable<Pair<F, S>> {F f;S s;Pair() {}Pair(F f, S s) {this.f = f;this.s = s;}Pair(Pair<F, S> p) {f = p.f;s = p.s;}@Overridepublic int compareTo(Pair<F, S> p) {if (f.compareTo(p.f) != 0) {return f.compareTo(p.f);}return s.compareTo(p.s);}@Overridepublic int hashCode() {return f.hashCode() ^ s.hashCode();}@Overridepublic boolean equals(Object o) {if (this == o) {return true;}if (o == null || this.f == null || this.s == null) {return false;}if (this.getClass() != o.getClass()) {return false;}Pair p = (Pair) o;return this.f.equals(p.f) && this.s.equals(p.s);}@Overridepublic String toString() {return "{" + f.toString() + ", " + s.toString() + "}";}}}