結果
| 問題 |
No.3164 [Chery 7th Tune B] La vie en rose
|
| コンテスト | |
| ユーザー |
ymm-knight
|
| 提出日時 | 2025-06-16 18:10:35 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 182 ms / 2,000 ms |
| コード長 | 1,610 bytes |
| コンパイル時間 | 2,744 ms |
| コンパイル使用メモリ | 199,628 KB |
| 実行使用メモリ | 12,692 KB |
| 最終ジャッジ日時 | 2025-06-16 18:10:50 |
| 合計ジャッジ時間 | 15,123 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 34 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define Loop(x,l,r) for (ll x = ll(l); x < ll(r); ++x)
#define LoopR(x,l,r) for (ll x = ll(r)-1; x >= ll(l); --x)
#define Looc(x,l,r) for (ll x = ll(l); x <= ll(r); ++x)
#define LoocR(x,l,r) for (ll x = ll(r); x >= ll(l); --x)
#define int ll
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
#ifndef DB
#define DB 0
#define endl '\n'
#endif
#define debugl(l) if constexpr ((l) < DB)
#define debug debugl(0)
struct DSU {
vector<int> par;
vector<ll> sum;
int n;
void init(int sz) {
n = sz;
par.assign(n, -1);
sum.assign(n, 0);
}
int rt(int v) { return par[v] == -1? v: (par[v] = rt(par[v])); }
void unite(int v, int u) {
v = rt(v);
u = rt(u);
if (v != u) {
par[u] = v;
sum[v] += sum[u];
}
}
void add(int v, ll x) {
v = rt(v);
sum[v] += x;
}
ll get(int v) { return sum[rt(v)]; }
};
void solve()
{
int n;
cin >> n;
vector<ll> val(n);
for (auto &x : val)
cin >> x;
DSU dsu;
dsu.init(n);
auto tryu = [&](int i) {
if (!val[i])
return;
if (0 <= i-1 && val[i-1])
dsu.unite(i-1, i);
if (i+1 < n && val[i+1])
dsu.unite(i+1, i);
};
auto getu = [&](int i) {
if (val[i])
return dsu.get(i);
ll ans = 0;
if (0 <= i-1)
ans += dsu.get(i-1);
if (i+1 < n)
ans += dsu.get(i+1);
return ans;
};
Loop (i,0,n) {
dsu.add(i, val[i]);
tryu(i);
}
int q;
cin >> q;
while (q--) {
int i, x;
cin >> i >> x;
i--;
cout << getu(i) + x - val[i] << '\n';
}
}
signed main()
{
cin.tie(0) -> sync_with_stdio(false);
int t = 1;
//cin >> t;
while (t--)
solve();
}
ymm-knight