static object Solve() { var n = int.Parse(Console.ReadLine()); var ps = Array.ConvertAll(new bool[n], _ => Read2()); var xs = ps.SelectMany(p => new[] { p.a, p.a + p.b }).ToArray(); var map = new CompressionHashMap(xs); var rev = map.ReverseMap; var raq = new StaticRAQ1(map.Count); foreach (var(a, b) in ps) { raq.Add(map[a], map[a + b], 1); } var s = raq.GetSum(); var r = new long[n + 1]; for (int i = 0; i < s.Length - 1; i++) { r[s[i]] += rev[i + 1] - rev[i]; } return(string.Join(" ", r[1..]));
static object Solve() { var n = int.Parse(Console.ReadLine()); var a = Read(); var map = new CompressionHashMap(a); var lst = new LST <long, long>(map.Count, (x, y) => y == -1 ? x : x * y % M, -1, (x, y) => (x + y) % M, 0, (x, p, _, l) => x == 0 ? p + 1 : p * x % M); var r = 0L; foreach (var av in a) { var v = map[av]; r += lst.Get(0, v + 1); r %= M; lst.Set(0, map.Count, 2); lst.Set(v, 0); } return(r); }
static object Solve() { var n = int.Parse(Console.ReadLine()); var a = Read(); var p2 = MPows(2, n); var p2_ = MPows(MHalf, n); var map = new CompressionHashMap(a); var bit = new BIT(map.Count); var r = 0L; for (int i = 0; i < n; i++) { var v = map[a[i]] + 1; r += bit.Sum(v) % M * p2_[n - i]; r %= M; bit.Add(v, p2[n - 1 - i]); } return(r); }
static object Solve() { var(n, m) = Read2L(); var es = Array.ConvertAll(new bool[m], _ => ReadL()); var xs = es.Select(e => e[0]) .Concat(es.Select(e => e[1])) .Append(1).Append(n) .ToArray(); var hmap = new CompressionHashMap(xs); var n2 = hmap.Count; var nes = new List <long[]>(); foreach (var e in es) { nes.Add(new[] { hmap[e[0]], hmap[e[1]], e[2] }); } for (int i = 1; i < n2; i++) { nes.Add(new[] { i - 1, i, hmap.ReverseMap[i] - hmap.ReverseMap[i - 1] }); } var map = ToMap(n2, nes.ToArray(), false); var r = Dijkstra(n2, v => map[v].ToArray(), 0, n2 - 1); return(r[^ 1]);
static object Solve() { var n = int.Parse(Console.ReadLine()); var a = Read(); var map = new CompressionHashMap(a); var m = map.Count; var dpu = new BIT(m); var dpd = new BIT(m); foreach (var v in a) { var i = map[v] + 1; dpu.Add(i, dpd.Sum(i - 1)); dpd.Add(i, dpu.Sum(i + 1, m + 1)); dpu.Add(i, 1); dpd.Add(i, 1); dpu[i] %= M; dpd[i] %= M; } return((dpu.Sum(m) + dpd.Sum(m) - 2 * n + M) % M); }
static object Solve() { var(h, w, n) = Read3(); var ps = Array.ConvertAll(new bool[n], _ => Read2()); var xs = Array.ConvertAll(ps, p => p.x); var ys = Array.ConvertAll(ps, p => p.y); var xmap = new CompressionHashMap(xs); var ymap = new CompressionHashMap(ys); return(string.Join("\n", Enumerable.Range(0, n).Select(i => $"{xmap[xs[i]] + 1} {ymap[ys[i]] + 1}"))); }
static void Main() { var(n, m, qc) = Read3(); var qs = Array.ConvertAll(new bool[qc], _ => Read3()); var map = new CompressionHashMap(qs.Select(q => q.y).Append(0).Append(-1).ToArray()); var ab = new[] { new int[n + 1], new int[m + 1] }; var counts = Array.ConvertAll(ab, _ => new BIT(map.Count)); var sums = Array.ConvertAll(ab, _ => new BIT(map.Count)); counts[0].Add(map[0], n); counts[1].Add(map[0], m); var r = 0L; Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }); foreach (var q in qs) { var(t1, x, y) = q; t1--; var t2 = 1 - t1; var y0 = ab[t1][x]; var i = map[y]; var i0 = map[y0]; ab[t1][x] = y; counts[t1].Add(i0, -1); counts[t1].Add(i, 1); sums[t1].Add(i0, -y0); sums[t1].Add(i, y); r -= counts[t2].Sum(i0) * y0; r -= sums[t2].Sum(i0 + 1, map.Count + 1); r += counts[t2].Sum(i) * y; r += sums[t2].Sum(i + 1, map.Count + 1); Console.WriteLine(r); } Console.Out.Flush(); }
static object Solve() { var(n, k) = ((int, long))Read2L(); var a = Read(); var compMap = new CompressionHashMap(a); a = compMap.Compressed; a = Array.ConvertAll(a, x => x + 1); var left = GetLeft(n, k, a); var bit = new BIT(n + 1); bit[1] = 1; for (int i = 0; i < n; i++) { bit[i + 2] = bit.Sum(left[i] + 1, i + 2) % M; } return(bit[n + 1]); }
static string Solve() { var n = int.Parse(Console.ReadLine()); var a = Read(); var map = new CompressionHashMap(a); a = map.Compressed; var b = a.Reverse().ToArray(); var max = map.Count - 1; string ReturnValue(int x, int y, int z) { var r = $"YES\n{x} {y} {z}"; //var mx = map.Raw.Take(x).Max(); //var my = map.Raw.Skip(x).Take(y).Min(); //var mz = map.Raw.Skip(x + y).Take(z).Max(); //if (mx != my || my != mz) // r += $"\n {n}\n " + string.Join(" ", map.Raw); return(r); } // 最大値が3つ以上含まれている場合 var maxIndexes = Enumerable.Range(0, n).Where(i => a[i] == max).ToArray(); if (maxIndexes.Length >= 3) { return(ReturnValue(maxIndexes[1], 1, n - maxIndexes[1] - 1)); } // 最小値 if (a[0] == 0 && a[^ 1] == 0 && a.Count(v => v == 0) >= 3) { return(ReturnValue(1, n - 2, 1)); } var max1 = a.CumMax(); var max2 = b.CumMax(); (int x, bool dup)[] Tally(int[] a, int[] cummax)
static object Solve() { var qc = int.Parse(Console.ReadLine()); var qs = Array.ConvertAll(new bool[qc], _ => Read4()); var xMap = new CompressionHashMap(qs.SelectMany(q => new[] { q.a, q.c }).ToArray()); var yMap = new CompressionHashMap(qs.SelectMany(q => new[] { q.b, q.d }).ToArray()); var n2 = 1; while (n2 < yMap.Count << 1) { n2 <<= 1; } var st = new ST1 <long>(yMap.Count, (x, y) => x + y, 0, Enumerable.Range(0, yMap.Count - 1).Select(i => (long)yMap.ReverseMap[i + 1] - yMap.ReverseMap[i]).ToArray()); var lst = new LST <bool, long>(yMap.Count, (x, y) => x ^ y, false, (x, y) => x + y, 0, (b, p, node, l) => st.Get(node.LastLeft(l).i - (n2 >> 1), node.LastRight(l).i - (n2 >> 1)) - p); var qd = qs .SelectMany(q => new[] { (add: true, x: q.a, q.b, q.d), (add: false, x: q.c, q.b, q.d) })
static object Solve() { var(n, m) = Read2(); var ls_x = Array.ConvertAll(new bool[n], _ => Read3L()); var ls_y = Array.ConvertAll(new bool[m], _ => Read3L()); // 柵に使われる座標 var xs = new List <long> { 0, -1 << 30, 1 << 30 }; var ys = new List <long> { 0, -1 << 30, 1 << 30 }; foreach (var(a, b, c) in ls_x) { xs.Add(a); xs.Add(b); ys.Add(c); } foreach (var(d, e, f) in ls_y) { xs.Add(d); ys.Add(e); ys.Add(f); } var xmap = new CompressionHashMap(xs.ToArray()); var ymap = new CompressionHashMap(ys.ToArray()); var lineMap_x = GridMap.Create(xmap.Count - 1, ymap.Count, false); var lineMap_y = GridMap.Create(xmap.Count, ymap.Count - 1, false); foreach (var(a, b, c) in ls_x) { var j = ymap[c]; for (int i = xmap[a]; i < xmap[b]; i++) { lineMap_x[i, j] = true; } } foreach (var(d, e, f) in ls_y) { var i = xmap[d]; for (int j = ymap[e]; j < ymap[f]; j++) { lineMap_y[i, j] = true; } } var(h, w) = (xmap.Count - 1, ymap.Count - 1); var uf = new GridUF(h, w); for (int i = 0; i < h; i++) { for (int j = 1; j < w; j++) { if (!lineMap_x[i, j]) { uf.Unite(new Point(i, j - 1), new Point(i, j)); } } } for (int j = 0; j < w; j++) { for (int i = 1; i < h; i++) { if (!lineMap_y[i, j]) { uf.Unite(new Point(i - 1, j), new Point(i, j)); } } } Point sv = (xmap[0], ymap[0]); Point ev = (0, 0); if (uf.AreUnited(sv, ev)) { return("INF"); } var delta_x = new long[h]; var delta_y = new long[w]; for (int i = 0; i < h; i++) { delta_x[i] = xmap.ReverseMap[i + 1] - xmap.ReverseMap[i]; } for (int j = 0; j < w; j++) { delta_y[j] = ymap.ReverseMap[j + 1] - ymap.ReverseMap[j]; } var area = 0L; for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { if (uf.AreUnited(sv, new Point(i, j))) { area += delta_x[i] * delta_y[j]; } } } return(area); }
static object Solve() { var(n, m) = Read2(); var ls_x = Array.ConvertAll(new bool[n], _ => Read3L()); var ls_y = Array.ConvertAll(new bool[m], _ => Read3L()); var xs = new List <long> { 0, -1 << 30, 1 << 30 }; var ys = new List <long> { 0, -1 << 30, 1 << 30 }; foreach (var(a, b, c) in ls_x) { xs.Add(a); xs.Add(b); ys.Add(c); } foreach (var(d, e, f) in ls_y) { xs.Add(d); ys.Add(e); ys.Add(f); } var xmap = new CompressionHashMap(xs.ToArray()); var ymap = new CompressionHashMap(ys.ToArray()); var map = GridMap.Create(xmap.Count - 1, ymap.Count - 1, 0L); var lineMap_x = GridMap.Create(xmap.Count - 1, ymap.Count, false); var lineMap_y = GridMap.Create(xmap.Count, ymap.Count - 1, false); // lines foreach (var(a, b, c) in ls_x) { var(ai, bi, cj) = (xmap[a], xmap[b], ymap[c]); for (int i = ai; i < bi; i++) { lineMap_x[i, cj] = true; } } foreach (var(d, e, f) in ls_y) { var(di, ej, fj) = (xmap[d], ymap[e], ymap[f]); for (int j = ej; j < fj; j++) { lineMap_y[di, j] = true; } } // regions for (int i = 0; i < map.Height; i++) { var th = xmap.ReverseMap[i + 1] - xmap.ReverseMap[i]; for (int j = 0; j < map.Width; j++) { map[i, j] = th * (ymap.ReverseMap[j + 1] - ymap.ReverseMap[j]); } } var uf = new GridUF(map.Height, map.Width); for (int i = 0; i < map.Height; i++) { for (int j = 1; j < map.Width; j++) { if (!lineMap_x[i, j]) { uf.Unite(new Point(i, j - 1), new Point(i, j)); } } } for (int j = 0; j < map.Width; j++) { for (int i = 1; i < map.Height; i++) { if (!lineMap_y[i, j]) { uf.Unite(new Point(i - 1, j), new Point(i, j)); } } } Point sv = (xmap[0], ymap[0]); Point ev = (0, 0); if (uf.AreUnited(sv, ev)) { return("INF"); } var area = 0L; for (int i = 0; i < map.Height; i++) { for (int j = 0; j < map.Width; j++) { if (uf.AreUnited(sv, new Point(i, j))) { area += map[i, j]; } } } return(area); }
static void Main() { Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }); var(n, m, qc) = Read3(); var qs = Array.ConvertAll(new bool[qc], _ => Read3()); var map = new CompressionHashMap(qs.Select(q => q.y).Append(0).ToArray()); var a = new int[n]; var b = new int[m]; var a_count = new ST1 <long>(map.Count, (x, y) => x + y, 0); var b_count = new ST1 <long>(map.Count, (x, y) => x + y, 0); var a_sum = new ST1 <long>(map.Count, (x, y) => x + y, 0); var b_sum = new ST1 <long>(map.Count, (x, y) => x + y, 0); a_count.Set(map[0], n); b_count.Set(map[0], m); var r = 0L; foreach (var(t, x, y) in qs) { var j = x - 1; if (t == 1) { var y0 = a[j]; var i = map[y]; var i0 = map[y0]; var sum0 = y0 * b_count.Get(map[0], i0) + b_sum.Get(i0, map.Count); var sum = y * b_count.Get(map[0], i) + b_sum.Get(i, map.Count); r += sum - sum0; a[j] = y; a_count.Set(i0, a_count.Get(i0) - 1); a_count.Set(i, a_count.Get(i) + 1); a_sum.Set(i0, a_sum.Get(i0) - y0); a_sum.Set(i, a_sum.Get(i) + y); } else { var y0 = b[j]; var i = map[y]; var i0 = map[y0]; var sum0 = y0 * a_count.Get(map[0], i0) + a_sum.Get(i0, map.Count); var sum = y * a_count.Get(map[0], i) + a_sum.Get(i, map.Count); r += sum - sum0; b[j] = y; b_count.Set(i0, b_count.Get(i0) - 1); b_count.Set(i, b_count.Get(i) + 1); b_sum.Set(i0, b_sum.Get(i0) - y0); b_sum.Set(i, b_sum.Get(i) + y); } Console.WriteLine(r); } Console.Out.Flush(); }
static void Main() { var(n, qc) = Read2(); var a = Read(); var qs = Array.ConvertAll(new bool[qc], _ => Read3()); var vs = a.ToList(); foreach (var(t, x, y) in qs) { if (t == 1) { vs.Add(y); } } var vMap = new CompressionHashMap(vs.ToArray()); // キーの値となりうるインデックスのリスト var map0 = Array.ConvertAll(new bool[vMap.Count], _ => new List <int>()); for (int i = 0; i < n; i++) { map0[vMap[a[i]]].Add(i); } foreach (var(t, x, y) in qs) { if (t == 1) { map0[vMap[y]].Add(x - 1); } } var map = Array.ConvertAll(map0, l => { var b = l.ToArray(); Array.Sort(b); return(b); }); var u = Array.ConvertAll(map, p => new bool[p.Length]); var mapInv = Array.ConvertAll(map, p => ToInverseMap(p)); for (int i = 0; i < n; i++) { u[vMap[a[i]]][mapInv[vMap[a[i]]][i]] = true; } var st = new ST1 <int>(n, Math.Min, int.MaxValue, a); var r = new List <int>(); Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }); foreach (var q in qs) { var(t, x, y) = q; x--; if (t == 1) { u[vMap[a[x]]][mapInv[vMap[a[x]]][x]] = false; a[x] = y; st.Set(x, y); u[vMap[a[x]]][mapInv[vMap[a[x]]][x]] = true; } else { r.Clear(); var p = st.Get(x, y); var inds = map[vMap[p]]; var j0 = First(0, inds.Length, j => inds[j] >= x); for (int j = j0; j < inds.Length && inds[j] < y; j++) { if (u[vMap[p]][j]) { r.Add(inds[j] + 1); } } Console.WriteLine($"{r.Count} " + string.Join(" ", r)); } } Console.Out.Flush(); }