记录编号 600185 评测结果 WWWWTTTTTT
题目名称 [HAOI 2012]高速公路 最终得分 0
用户昵称 Gravatar李奇文 是否通过 未通过
代码语言 C++ 运行时间 25.850 s
提交时间 2025-04-19 15:48:30 内存使用 7.54 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int Maxn=1e5+5;
struct tree {
	ll l,r,tb,lazy;
} f[Maxn*4];
ll n,m;
ll gcd(ll x,ll y){
    if(y==0){
		return x;
	}
    return gcd(y,x%y);
}
void pushup(ll p){
	f[p].tb=f[p*2].tb+f[p*2+1].tb;
}
void pushdown(ll p){
	if(!f[p].lazy){
		return;
	}else{
		ll lp=p*2,rp=p*2+1;
		f[lp].lazy+=f[p].lazy;
		f[rp].lazy+=f[p].lazy;
		ll mid=(f[p].l+f[p].r)>>1;
		f[lp].tb+=(mid-f[p].l+1)*f[p].lazy;
		f[rp].tb+=(f[p].r-mid)*f[p].lazy;
		f[p].lazy=0;
	}
	return;
}
void build(ll p,ll l,ll r) { 
	f[p].l=l,f[p].r=r;
	if(l==r) {
		f[p].tb=0;
		return;
	}
	ll mid=(l+r)/2;
	build(p*2,l,mid);
	build(p*2+1,mid+1,r);
	pushup(p);
	return;
}
ll query(ll p,ll x,ll y){
	if(x<=f[p].l&&f[p].r<=y) {
		return f[p].tb;
	}
	pushdown(p);
	ll mid=(f[p].l+f[p].r)/2,sum=0;
	if(x<=mid) {
		sum+=query(p*2,x,y);
	}
	if(mid<y) {
		sum+=query(p*2+1,x,y);
	}
	return sum;
}
void change(ll p,ll l,ll r,ll k){
	if(l<=f[p].l&&f[p].r<=r){
		f[p].lazy+=k;
		f[p].tb+=(f[p].r-f[p].l+1)*k;
		return;
	}else{
		pushdown(p);
		ll mid=(f[p].l+f[p].r)/2;
		if(l<=mid) change(p*2,l,r,k);
		if(mid<r) change(p*2+1,l,r,k);
		f[p].tb=f[p*2].tb+f[p*2+1].tb;
	}
	return;
}
void solve(ll i,ll j){
	ll fz=0,fm=0,ac=j-i;
	fm=(ac+1)*ac/2;
	ll l=(j>>1),r=(j>>1)+(ac%2==0?2:1);
	for(int k=(ac%2==0?2:1);k<=ac;k+=2){
		fz+=k*query(1,l,r-1);
		l--;
		r++;
	}
	ll d=gcd(fz,fm);
	printf("%lld/%lld",fz/d,fm/d);
}
int main(){
	freopen("roadxw.in","r",stdin);
	freopen("roadxw.out","w",stdout);
	scanf("%lld%lld",&n,&m);
	build(1,1,n-1);
	while(m--){
		char op;
		ll l,r;
		cin>>op;
		scanf("%lld%lld",&l,&r);
		if(op=='C'){
			ll v;
			scanf("%lld",&v);
			change(1,l,r-1,v);
		}else{
			solve(l,r);
		}
	}
	return 0;
}