結果

問題 No.3507 RangeSum RangeUpdate RangeSqrt
コンテスト
ユーザー 👑 tails
提出日時 2026-04-18 22:41:44
言語 cLay
(20250308-1 + boost 1.89.0)
コンパイル:
clayc _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 854 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 4,257 ms
コンパイル使用メモリ 208,360 KB
実行使用メモリ 19,584 KB
最終ジャッジ日時 2026-04-18 22:42:15
合計ジャッジ時間 8,006 ms
ジャッジサーバーID
(参考情報)
judge3_1 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 1 WA * 28
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

struct Val {
	ll v[5];
	void set(ll x){
		rep(i,5){
			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[4]?1:0;
	}
};

struct Fun {
	Val v;
	ll n;
};

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

Val segtree_rh_apply(Fun a,Val b){
	if(a.n){
		rep(a.n){
			b.shift();
		}
	}else{
		rep(i,5){
			b.v[i]=a.v.v[i];
		}
	}
	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].set(a);
}
t.build();
rep(q){
	ll@a,@l,@r;
	if(a==0){
		wt(l<r?t.get(l,r).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