提出 #48572832


ソースコード 拡げる

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Numerics;

namespace Tasks;

public class E
{
    public static void Main()
    {
        using var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
        Console.SetOut(sw);
        Solve();
        Console.Out.Flush();
    }

    public static void Solve()
    {
        var N = Scanner.Scan<int>();
        var queries = new Query[N];
        for (var i = 0; i < N; i++)
        {
            var (t, x) = Scanner.Scan<int, int>();
            queries[i] = new Query(t, x - 1);
        }

        var answers = new List<int>();
        var ft = new FenwickTree<int>(N);
        var k = 0;
        for (var i = N - 1; i >= 0; i--)
        {
            var (t, x) = queries[i];
            if (t == 1)
            {
                var c = ft.Sum(x, x + 1);
                if (c == 0)
                {
                    answers.Add(0);
                }
                else
                {
                    answers.Add(1);
                    k = Math.Max(k, ft.Sum(N));
                    ft.Add(x, -1);
                }
            }
            else
            {
                ft.Add(x, 1);
            }
        }

        if (ft.Sum(N) > 0)
        {
            Console.WriteLine(-1);
        }
        else
        {
            answers.Reverse();
            Console.WriteLine(k);
            Console.WriteLine(string.Join(" ", answers));
        }
    }

    public class FenwickTree<T>
        where T : struct, IAdditionOperators<T, T, T>, ISubtractionOperators<T, T, T>, IComparisonOperators<T, T, bool>
    {
        public int Length { get; }
        private readonly T[] _data;
        public FenwickTree(int length)
        {
            if (length < 0) throw new ArgumentOutOfRangeException(nameof(length));
            Length = length;
            _data = new T[length];
        }
        public void Add(int index, T value)
        {
            if (index < 0 || Length <= index) throw new ArgumentOutOfRangeException(nameof(index));
            index++;
            while (index <= Length)
            {
                _data[index - 1] += value;
                index += index & -index;
            }
        }
        public T Sum(int length)
        {
            if (length < 0 || Length < length) throw new ArgumentOutOfRangeException(nameof(length));
            T s = default;
            while (length > 0)
            {
                s += _data[length - 1];
                length -= length & -length;
            }
            return s;
        }
        public T Sum(int left, int right)
        {
            if (left < 0 || right < left || Length < right) throw new ArgumentOutOfRangeException();
            return Sum(right) - Sum(left);
        }
        public int LowerBound(T value) => Bound(value, (x, y) => x <= y);
        public int UpperBound(T value) => Bound(value, (x, y) => x < y);
        private int Bound(T value, Func<T, T, bool> compare)
        {
            if (Length == 0 || compare(value, _data[0])) return 0;
            var x = 0;
            var r = 1;
            while (r < Length) r <<= 1;
            for (var k = r; k > 0; k >>= 1)
            {
                if (x + k - 1 >= Length || compare(value, _data[x + k - 1])) continue;
                value -= _data[x + k - 1];
                x += k;
            }
            return x;
        }
    }

    public readonly record struct Query(int t, int x);

    public static class Scanner
    {
        public static T Scan<T>() where T : IConvertible => Convert<T>(ScanStringArray()[0]);
        public static (T1, T2) Scan<T1, T2>() where T1 : IConvertible where T2 : IConvertible
        {
            var input = ScanStringArray();
            return (Convert<T1>(input[0]), Convert<T2>(input[1]));
        }
        public static (T1, T2, T3) Scan<T1, T2, T3>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible
        {
            var input = ScanStringArray();
            return (Convert<T1>(input[0]), Convert<T2>(input[1]), Convert<T3>(input[2]));
        }
        public static (T1, T2, T3, T4) Scan<T1, T2, T3, T4>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible
        {
            var input = ScanStringArray();
            return (Convert<T1>(input[0]), Convert<T2>(input[1]), Convert<T3>(input[2]), Convert<T4>(input[3]));
        }
        public static (T1, T2, T3, T4, T5) Scan<T1, T2, T3, T4, T5>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible
        {
            var input = ScanStringArray();
            return (Convert<T1>(input[0]), Convert<T2>(input[1]), Convert<T3>(input[2]), Convert<T4>(input[3]), Convert<T5>(input[4]));
        }
        public static (T1, T2, T3, T4, T5, T6) Scan<T1, T2, T3, T4, T5, T6>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible where T6 : IConvertible
        {
            var input = ScanStringArray();
            return (Convert<T1>(input[0]), Convert<T2>(input[1]), Convert<T3>(input[2]), Convert<T4>(input[3]), Convert<T5>(input[4]), Convert<T6>(input[5]));
        }
        public static IEnumerable<T> ScanEnumerable<T>() where T : IConvertible => ScanStringArray().Select(Convert<T>);
        private static string[] ScanStringArray()
        {
            var line = Console.ReadLine()?.Trim() ?? string.Empty;
            return string.IsNullOrEmpty(line) ? Array.Empty<string>() : line.Split(' ');
        }
        private static T Convert<T>(string value) where T : IConvertible => (T)System.Convert.ChangeType(value, typeof(T));
    }
}

提出情報

提出日時
問題 E - Takahashi Quest
ユーザ AconCavy
言語 C# 11.0 (.NET 7.0.7)
得点 450
コード長 5987 Byte
結果 AC
実行時間 134 ms
メモリ 58936 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 450 / 450
結果
AC × 3
AC × 47
セット名 テストケース
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt, 01_random_21.txt, 01_random_22.txt, 01_random_23.txt, 01_random_24.txt, 01_random_25.txt, 01_random_26.txt, 01_random_27.txt, 01_random_28.txt, 01_random_29.txt, 01_random_30.txt, 01_random_31.txt, 01_random_32.txt, 01_random_33.txt, 01_random_34.txt, 01_random_35.txt, 01_random_36.txt, 01_random_37.txt, 01_random_38.txt, 02_handmade_39.txt, 02_handmade_40.txt, 02_handmade_41.txt, 02_handmade_42.txt, 02_handmade_43.txt, 02_handmade_44.txt, 02_handmade_45.txt, 02_handmade_46.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 44 ms 25300 KiB
00_sample_01.txt AC 44 ms 25040 KiB
00_sample_02.txt AC 43 ms 25512 KiB
01_random_03.txt AC 49 ms 27764 KiB
01_random_04.txt AC 65 ms 34000 KiB
01_random_05.txt AC 107 ms 56620 KiB
01_random_06.txt AC 109 ms 56788 KiB
01_random_07.txt AC 54 ms 27856 KiB
01_random_08.txt AC 57 ms 35652 KiB
01_random_09.txt AC 81 ms 46980 KiB
01_random_10.txt AC 58 ms 32712 KiB
01_random_11.txt AC 110 ms 55840 KiB
01_random_12.txt AC 66 ms 35572 KiB
01_random_13.txt AC 119 ms 55944 KiB
01_random_14.txt AC 71 ms 38564 KiB
01_random_15.txt AC 113 ms 56620 KiB
01_random_16.txt AC 72 ms 42204 KiB
01_random_17.txt AC 52 ms 31620 KiB
01_random_18.txt AC 67 ms 42516 KiB
01_random_19.txt AC 98 ms 52192 KiB
01_random_20.txt AC 51 ms 27224 KiB
01_random_21.txt AC 124 ms 56900 KiB
01_random_22.txt AC 122 ms 57136 KiB
01_random_23.txt AC 125 ms 56980 KiB
01_random_24.txt AC 115 ms 56460 KiB
01_random_25.txt AC 112 ms 56596 KiB
01_random_26.txt AC 115 ms 56580 KiB
01_random_27.txt AC 134 ms 57008 KiB
01_random_28.txt AC 121 ms 56828 KiB
01_random_29.txt AC 130 ms 56968 KiB
01_random_30.txt AC 114 ms 56060 KiB
01_random_31.txt AC 129 ms 55500 KiB
01_random_32.txt AC 116 ms 56088 KiB
01_random_33.txt AC 119 ms 58936 KiB
01_random_34.txt AC 108 ms 56316 KiB
01_random_35.txt AC 123 ms 56880 KiB
01_random_36.txt AC 99 ms 50236 KiB
01_random_37.txt AC 101 ms 55524 KiB
01_random_38.txt AC 120 ms 55940 KiB
02_handmade_39.txt AC 118 ms 56824 KiB
02_handmade_40.txt AC 125 ms 56824 KiB
02_handmade_41.txt AC 126 ms 56816 KiB
02_handmade_42.txt AC 123 ms 57044 KiB
02_handmade_43.txt AC 134 ms 56892 KiB
02_handmade_44.txt AC 124 ms 56960 KiB
02_handmade_45.txt AC 35 ms 25268 KiB
02_handmade_46.txt AC 47 ms 25368 KiB