コード例 #1
0
        public void Solve(ConsoleReader cr, ConsoleWriter cw)
        {
            int N   = cr;
            int Q   = cr;
            var seg = new LazySegtree <(uint v, uint len), (uint b, uint c), LazySegtreeSolverOp>(cr.Repeat(N).Select(cr => ((uint)cr.Int(), 1U)));

            for (int q = 0; q < Q; q++)
            {
                int t = cr;
                int l = cr;
                int r = cr;
                if (t == 0)
                {
                    uint b = (uint)cr.Int();
                    uint c = (uint)cr.Int();
                    seg.Apply(l, r, (b, c));
                }
                else
                {
                    cw.WriteLine(seg[l..r].v);
コード例 #2
0
        public override void Solve(ConsoleReader cr, ConsoleWriter cw)
        {
            int q      = cr;
            var queues = new RealTimeQueue <int> [q];

            for (int i = 0; i < q; i++)
            {
                var type = cr.Int();
                var t    = cr.Int();
                var prev = (uint)t < (uint)queues.Length ? queues[t] : RealTimeQueue <int> .Empty;
                if (type == 0)
                {
                    queues[i] = prev.Enqueue(cr.Int());
                }
                else
                {
                    queues[i] = prev.Dequeue(out var v);
                    cw.WriteLine(v);
                }
            }
        }
コード例 #3
0
        public void Solve(ConsoleReader cr, ConsoleWriter cw)
        {
            _ = cr.Ascii();
            _ = cr.Ascii();
            int n      = cr;
            int m      = cr;
            var twoSat = new TwoSat(n);

            for (int i = 0; i < m; i++)
            {
                int a = cr;
                int b = cr;
                _ = cr.Int();

                int  a1 = Math.Abs(a) - 1;
                bool a2 = a >= 0;
                int  b1 = Math.Abs(b) - 1;
                bool b2 = b >= 0;
                twoSat.AddClause(a1, a2, b1, b2);
            }
            if (twoSat.Satisfiable())
            {
                cw.WriteLine("s SATISFIABLE");
                cw.StreamWriter.Write("v ");
                var res    = new int[n + 1];
                var answer = twoSat.Answer();
                for (int i = 0; i < n; i++)
                {
                    if (answer[i])
                    {
                        res[i] = i + 1;
                    }
                    else
                    {
                        res[i] = -(i + 1);
                    }
                }
                cw.WriteLineJoin(res);
            }
            else
            {
                cw.WriteLine("s UNSATISFIABLE");
            }
        }