Exemple #1
0
    static void Main()
    {
        var n = int.Parse(Console.ReadLine());
        var s = Console.ReadLine();

        var dp = new long[n];

        dp[0] = 1;

        for (int i = 1; i < n; i++)
        {
            var cum = new CumSum(dp);
            var t   = new long[n];
            if (s[i - 1] == '>')
            {
                for (int j = 0; j <= i; j++)
                {
                    t[j] = cum.Sum(j, i);
                }
            }
            else
            {
                for (int j = 0; j <= i; j++)
                {
                    t[j] = cum.Sum(0, j);
                }
            }
            dp = Array.ConvertAll(t, x => x % M);
        }
        Console.WriteLine(dp.Sum() % M);
    }
Exemple #2
0
    static void Main()
    {
        var(n, l) = ((int, long))Read2L();
        var a = Read();
        var s = new CumSum(a);

        var r = Last(a.Min(), l, x =>
        {
            var raq  = 0;
            var lazy = new int[n + 1];
            lazy[0]++;
            lazy[1]--;

            for (int i = 0; i <= n; i++)
            {
                raq += lazy[i];
                if (i == n)
                {
                    return(raq > 0);
                }
                if (raq <= 0)
                {
                    continue;
                }

                var left  = First(i + 1, n + 1, j => s.s[j] >= s.s[i] + x);
                var right = Last(i, n, j => s.s[j] <= s.s[i] + l);

                if (left <= n && n <= right)
                {
                    return(true);
                }
                if (left <= n)
                {
                    lazy[left]++;
                }
                if (right + 1 <= n)
                {
                    lazy[right + 1]--;
                }
            }
            return(false);
        });

        Console.WriteLine(r);
    }
Exemple #3
0
    static void Main()
    {
        var(n, qc) = Read2();
        var s  = Console.ReadLine();
        var qs = Array.ConvertAll(new bool[qc], _ => Read2());

        var cs = new CumSum(Array.ConvertAll(s.ToCharArray(), c => c - 'a' + 1));

        Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput())
        {
            AutoFlush = false
        });
        foreach (var(l, r) in qs)
        {
            Console.WriteLine(cs.Sum(l - 1, r));
        }
        Console.Out.Flush();
    }