結果

問題 No.3507 RangeSum RangeUpdate RangeSqrt
コンテスト
ユーザー 👑 tails
提出日時 2026-04-18 23:20:59
言語 cLay
(20250308-1 + boost 1.89.0)
コンパイル:
clayc _filename_
実行:
./a.out
結果
AC  
実行時間 218 ms / 2,000 ms
コード長 914 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 4,849 ms
コンパイル使用メモリ 209,404 KB
実行使用メモリ 23,936 KB
最終ジャッジ日時 2026-04-18 23:23:30
合計ジャッジ時間 12,226 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 29
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

struct V {
	ll v[6];
	void set(ll x){
		rep(i,6){
			v[i]=x;
			x=Isqrt(x);
		}
	}
	void shift(){
		v[0]=v[1];
		v[1]=v[2];
		v[2]=v[3];
		v[3]=v[4];
		v[4]=v[5];
	}
};

struct Val {
	V v;
	ll m;
};

struct Fun {
	V v;
	ll n;
};

Val segtree_rh_merge(Val a,Val b){
	rep(i,6){
		b.v.v[i]+=a.v.v[i];
	}
	b.m+=a.m;
	return b;
}

Val segtree_rh_apply(Fun a,Val b){
	if(a.n){
		rep(a.n){
			b.v.shift();
		}
	}else{
		rep(i,6){
			b.v.v[i]=a.v.v[i]*b.m;
		}
	}
	return b;
}

Fun segtree_rh_compose(Fun a,Fun b){
	if(a.n){
		if(b.n){
			a.n+=b.n;
		}else{
			rep(a.n){
				b.v.shift();
			}
			a=b;
		}
	}
	return a;
}

{

ll@n,@q;
segtree_rh<Val,Fun>t;
t.malloc(n,1);
rep(i,n){
	ll@a;
	t[i].v.set(a);
	t[i].m=1;
}
t.build();
rep(q){
	ll@a,@l,@r;
	if(a==0){
		wt(l<r?t.get(l,r).v.v[0]:0);
	}
	if(a==1){
		ll@x;
		Fun f;
		f.n=0;
		f.v.set(x);
		t.change(l,r,f);
	}
	if(a==2){
		Fun f;
		f.n=1;
		t.change(l,r,f);
	}
}

}
0