関数をそのまま持たずに,必要な情報にそぎ落とす. 今回の clamp 関数では,組 \( (s,l,r) \) を持っておけば 関数が復元できる. ここで,clamp 関数において, 全体を \(+s\) シフトする, 下限が \(l\), 上限が \(r\) とする.
実装
\(+a\) シフトするとき,\(l,r\) も同時に \(+a\) シフトする.
使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"
int main(){
ll n, m ;
cin >> n;
ll l = -INFL; // rem : -INFL
ll r = INFL;
ll s = 0;
rep(i,n){
ll a,t; cin >> a >> t;
if(t == 1){
s += a;
l += a;
r += a;
}
if(t == 2){
chmax(l, a);
chmax(r, a);
}
if(t == 3){
chmin(l, a);
chmin(r, a);
}
}
ll q; cin >> q;
rep(qi,q){
ll x; cin >> x;
}
return 0;
}