結果
| 問題 |
No.3265 地元に帰れば天才扱い!
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-09-06 14:06:31 |
| 言語 | C# (.NET 8.0.404) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,496 bytes |
| コンパイル時間 | 13,865 ms |
| コンパイル使用メモリ | 171,020 KB |
| 実行使用メモリ | 250,264 KB |
| 最終ジャッジ日時 | 2025-09-06 14:07:17 |
| 合計ジャッジ時間 | 31,974 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 WA * 2 |
| other | WA * 21 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.csproj を復元しました (158 ミリ秒)。 main -> /home/judge/data/code/bin/Release/net8.0/main.dll main -> /home/judge/data/code/bin/Release/net8.0/publish/
ソースコード
#nullable enable
using System.Numerics;
#region
var _input = Array.Empty<string>();
var _iter = 0;
string String()
{
while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Split(' '), 0);
return _input[_iter++];
}
T I<T>() where T : IParsable<T> => T.Parse(String(), null);
#endregion
var n = I<int>();
var m = I<int>();
var dataS = new PointAddRangeSum<long>(m);
var dataC = new RangeAddPointGet<int>(m);
var iwiz = new (int, long, int, int)[n];
for (var i = 0; i < n; i++)
{
var a = I<int>();
var l = I<int>() - 1;
var r = I<int>();
dataS.Add(i, a);
dataC.Add(l, r, 1);
iwiz[i] = (i, a, l, r);
}
var s = 0L;
for (var i = 0; i < n; i++)
{
var (_, a, l, r) = iwiz[i];
s += a * (r - l) - dataS.Sum(l, r);
}
var q = I<int>();
var ans = new long[q];
for (var i = 0; i < q; i++)
{
var x = I<int>() - 1;
var y = I<int>() - 1;
var nl = I<int>() - 1;
var nr = I<int>();
var (t, a, l, r) = iwiz[x];
s -= a * (r - l) - dataS.Sum(l, r);
dataS.Add(t, -a);
dataS.Add(y, a);
s += a * (nr - nl) - dataS.Sum(nl, nr);
s += a * dataC.Get(t);
dataC.Add(l, r, -1);
dataC.Add(nl, nr, 1);
s -= a * dataC.Get(y);
iwiz[x] = (y, a, nl, nr);
ans[i] = s;
}
Console.WriteLine(string.Join(Environment.NewLine, ans));
class FenwickTree<T> where T : INumber<T>
{
readonly T[] _values;
public FenwickTree(int length) { _values = new T[length + 2]; }
public void Add(int i, T value)
{
var values = _values;
while (i < values.Length)
{
values[i] += value;
i += i & -i;
}
}
public T Sum(int i)
{
var values = _values;
var res = T.Zero;
while (i > 0)
{
res += values[i];
i -= i & -i;
}
return res;
}
}
class PointAddRangeSum<T> where T : INumber<T>
{
public PointAddRangeSum(int length) { _data = new FenwickTree<T>(length); }
public void Add(int at, T value) => _data.Add(at + 1, value);
public T Sum(int l, int r) => _data.Sum(r) - _data.Sum(l); // [l, r)
readonly FenwickTree<T>_data;
}
class RangeAddPointGet<T> where T : INumber<T>
{
public RangeAddPointGet(int length) { _data = new FenwickTree<T>(length); }
public void Add(int l, int r, T value) // [l, r)
{
_data.Add(l + 1, value);
_data.Add(r + 1, -value);
}
public T Get(int at) => _data.Sum(at + 1);
readonly FenwickTree<T>_data;
}