首页 技术 正文
技术 2022年11月8日
0 收藏 746 点赞 2,081 浏览 1924 个字

2752

思路:

  线段树;

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define maxn 100005
#define ll long long
#define maxtree maxn<<2
ll n,m,val[maxtree],val1[maxtree],val2[maxtree],len[maxtree],len2[maxtree];
ll L[maxtree],R[maxtree],mid[maxtree],size[maxtree],tag[maxtree];
inline void in(ll &now)
{
ll if_z=;now=;
char Cget=getchar();
while(Cget>''||Cget<'')
{
if(Cget=='-') if_z=-;
Cget=getchar();
}
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
now*=if_z;
}
void build(ll now,ll l,ll r)
{
L[now]=l,R[now]=r,size[now]=r-l+;
if(l==r)
{
len[now]=l,len2[now]=l*l;
return;
}
mid[now]=l+r>>;
build(now<<,l,mid[now]);
build(now<<|,mid[now]+,r);
len[now]=len[now<<]+len[now<<|];
len2[now]=len2[now<<]+len2[now<<|];
}
void pushdown(ll now)
{
val[now<<]+=size[now<<]*tag[now];
val[now<<|]+=size[now<<|]*tag[now];
val1[now<<]+=len[now<<]*tag[now];
val1[now<<|]+=len[now<<|]*tag[now];
val2[now<<]+=len2[now<<]*tag[now];
val2[now<<|]+=len2[now<<|]*tag[now];
tag[now<<]+=tag[now],tag[now<<|]+=tag[now],tag[now]=;
}
void add(ll now,ll l,ll r,ll x)
{
if(L[now]>=l&&R[now]<=r)
{
val[now]+=size[now]*x;
val1[now]+=len[now]*x;
val2[now]+=len2[now]*x;
tag[now]+=x;
return;
}
if(tag[now]) pushdown(now);
if(l<=mid[now]) add(now<<,l,r,x);
if(r>mid[now]) add(now<<|,l,r,x);
val[now]=val[now<<]+val[now<<|];
val1[now]=val1[now<<]+val1[now<<|];
val2[now]=val2[now<<]+val2[now<<|];
}
ll query(ll now,ll l,ll r,ll to)
{
if(L[now]>=l&&R[now]<=r)
{
if(to==) return val[now];
else if(to==) return val1[now];
else return val2[now];
}
if(tag[now]) pushdown(now);ll res=;
if(l<=mid[now]) res+=query(now<<,l,r,to);
if(r>mid[now]) res+=query(now<<|,l,r,to);
return res;
}
ll gcd(ll a,ll b)
{
return b?gcd(b,a%b):a;
}
int main()
{
in(n),in(m),build(,,n-);
char op[];ll tmp,tmp1,tmp2,l,r,x,g;
while(m--)
{
scanf("%s",op),in(l),in(r);
if(op[]=='C')
{
in(x);
add(,l,r-,x);
}
else
{
x=((r-l+)*(r-l))>>,tmp=query(,l,r-,)*(r-l*r);
tmp1=query(,l,r-,)*(l+r-),tmp2=-query(,l,r-,);
tmp+=tmp1+tmp2,g=gcd(tmp,x),tmp/=g,x/=g;
printf("%lld/%lld\n",tmp,x);
}
}
return ;
}
下一篇: PHP随机浮点数
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,105
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,582
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,429
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,836
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,919