static object Solve() { var n = int.Parse(Console.ReadLine()); var ps = Array.ConvertAll(new bool[n], _ => { Console.ReadLine(); return(Read()); }); var qc = int.Parse(Console.ReadLine()); var qs = Array.ConvertAll(new bool[qc], _ => Read2()); var st = new STR <int>(100000, (x, y) => x + y, 0); var l = new List <(int x, int y1, int y2, int d)>(); foreach (var xys in ps) { var m2 = xys.Length / 4; var q = Enumerable.Range(0, m2) .Select(i => (x: xys[4 * i], y1: Math.Min(xys[4 * i + 1], xys[4 * i + 3]), y2: Math.Max(xys[4 * i + 1], xys[4 * i + 3]))) .OrderBy(_ => _.x); foreach (var(x, y1, y2) in q) { if (st.Get(y1) == 0) { l.Add((x, y1, y2, 1)); st.Set(y1, y2, 1); } else { l.Add((x, y1, y2, -1)); st.Set(y1, y2, -1); } } } for (int qi = 0; qi < qc; qi++) { var(x, y) = qs[qi]; // y2: Query ID l.Add((x, y, qi, 2)); } var r = new int[qc]; foreach (var item in l.OrderBy(_ => _.x).ThenBy(_ => _.d)) { if (item.d != 2) { var(_, y1, y2, d) = item; st.Set(y1, y2, d); } else { var(_, y, qi, _) = item; r[qi] = st.Get(y); } } return(string.Join("\n", r)); }
static void Main() { Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }); var h = Read(); var n = h[0]; var st = new STR <long>(n + 1, (x, y) => x + y, 0); for (int k = 0; k < h[1]; k++) { var q = Read(); if (q[0] == 0) { st.Set(q[1], q[2] + 1, q[3]); } else { Console.WriteLine(st.Get(q[1])); } } Console.Out.Flush(); }
static void Main() { Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }); var h = Read(); var n = h[0]; var st = new STR <int?>(n, (x, y) => x.HasValue ? x : y, null); st.Set(0, n, int.MaxValue); for (int k = 0; k < h[1]; k++) { var q = Read(); if (q[0] == 0) { st.Set(q[1], q[2] + 1, q[3]); } else { Console.WriteLine(st.Get(q[1])); } } Console.Out.Flush(); }
static void Main() { Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }); var n = int.Parse(Console.ReadLine()); var map = Array.ConvertAll(new int[n], _ => Read().Skip(1).ToList()); var qc = int.Parse(Console.ReadLine()); var qs = Array.ConvertAll(new int[qc], _ => Read()); var et = new EulerTour(n, 0, map); var st = new STR <long>(2 * n, (x, y) => x + y, 0); foreach (var q in qs) { if (q[0] == 0) { st.Set(et.ordersMap[q[1]][0], et.ordersMap[q[1]].Last() + 1, q[2]); } else { Console.WriteLine(st.Get(et.ordersMap[q[1]][0])); } } Console.Out.Flush(); }
static object Solve() { var(n, m) = Read2(); var qs = Array.ConvertAll(new bool[m], _ => Read2()); var st = new STR <int>(n + 1, (x, y) => x + y, 0); var c = 0L; foreach (var(l, r) in qs.OrderBy(_ => _.r).ThenBy(_ => - _.l)) { c += st.Get(l) + st.Get(r); st.Set(l + 1, r, 1); } return(c); }
static void Main() { var h = Read(); int n = h[0], q = h[1]; var rs = new int[n].Select(_ => Read()).ToArray(); var ps = new int[q].Select(_ => Read()).ToArray(); var ys = rs.Select(r => r[1]).Concat(rs.Select(r => r[1] + r[2])).Concat(ps.Select(p => p[1])).Distinct().OrderBy(v => v).ToArray(); var yd = Enumerable.Range(0, ys.Length).ToDictionary(i => ys[i]); // ソートのため、cost を -1 倍。 var xqs = rs.Select(r => (x: r[0], c: -r[3], ymin: yd[r[1]], ymax: yd[r[1] + r[2]] + 1)) .Concat(rs.Select(r => (x: r[0] + r[2], c: r[3], ymin: yd[r[1]], ymax: yd[r[1] + r[2]] + 1))) .Concat(ps.Select((p, id) => (x: p[0], c: 0, ymin: yd[p[1]], ymax: id))) .OrderBy(xq => xq); var cost = new long[q]; var st = new STR <long>(ys.Length, (x, y) => x + y, 0); foreach (var(_, c, ymin, ymax) in xqs) { if (c == 0) { cost[ymax] = st.Get(ymin); } else { st.Set(ymin, ymax, -c); } } Console.WriteLine(string.Join("\n", cost)); }
static void Main() { var h = Read(); int n = h[0], k = h[1]; var a = Read(); // TLE var st = new STR <int>(n, (x, y) => x + y, 0); for (int c = 0; c < k; c++) { for (int i = 0; i < n; i++) { st.Set(Math.Max(0, i - a[i]), Math.Min(n, i + a[i] + 1), 1); } var b = new int[n]; for (int i = 0; i < n; i++) { b[i] = st.Get(i); } if (Enumerable.SequenceEqual(a, b)) { break; } a = b; st.Init(); } Console.WriteLine(string.Join(" ", a)); }
static void Main() { var(n, qc) = Read2(); var qs = Array.ConvertAll(new bool[qc], _ => Read()); var st = new STR <int>(2 * n + 1, (x, y) => x + y, 0); Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }); foreach (var q in qs) { var k = q[1]; if (q[0] == 1) { var v = st.Get(k); Console.WriteLine(v % 2 == 0 ? k : 2 * n - k + 1); } else { st.Set(n - k + 1, n + k + 1, 1); } } Console.Out.Flush(); }
static void Main() { var h = Read(); int n = h[0], k = h[1]; var a = Array.ConvertAll(new int[n], _ => int.Parse(Console.ReadLine())); var st = new STR <int>(kM + 1, Math.Max, 0); for (int i = 0; i < n; i++) { st.Set(Math.Max(0, a[i] - k), Math.Min(kM + 1, a[i] + k + 1), st.Get(a[i]) + 1); } Console.WriteLine(Enumerable.Range(0, kM + 1).Max(st.Get)); }
static void Main() { var n = int.Parse(Console.ReadLine()); var a = Read(); var qc = int.Parse(Console.ReadLine()); var qs = Array.ConvertAll(new bool[qc], _ => Read3()); var d = a.GroupBy(x => x).ToDictionary(g => g.Key, g => g.LongCount()); var sum = d.Values.Sum(c => c * (c - 1) / 2); void Add(int x, int count) { var c = d.GetValueOrDefault(x); sum -= c * (c - 1) / 2; c += count; sum += c * (c - 1) / 2; d[x] = c; } var ruq = new STR <int>(n, (x, y) => x == -1 ? y : x, -1); var rs = new int[n]; for (var(l, r) = (0, 1); r <= n; r++) { if (r == n || a[r] != a[r - 1]) { ruq.Set(l, r, l); rs[l] = r; l = r; } } Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }); foreach (var q in qs) { var(L, R, X) = q; L--; var ll = ruq.Get(L); var rl = ruq.Get(R - 1); var rr = rs[rl]; var lx = a[ll]; var rx = a[rl]; // 関連する区間を全て除きます。 for (int l = ll; l < rr; l = rs[l]) { Add(a[l], -(rs[l] - l)); } Add(lx, L - ll); Add(X, R - L); Add(rx, rr - R); rs[ll] = L; a[L] = X; ruq.Set(L, R, L); rs[L] = R; if (R < rr) { a[R] = rx; ruq.Set(R, rr, R); rs[R] = rr; } Console.WriteLine(sum); } Console.Out.Flush(); }