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); }
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); }
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(); }