洛谷P2221 [HAOI2012]高速公路
线段树
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#define INF 0x7f7f7f7f
#define MAXN 100005
#define rint register int
#define pb push_back
#define pii pair<int,int>
#define mp make_pair
#define ft first
#define sc second
#define ll long long
using namespace std;
ll read(){
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if('-'==ch)f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
struct Node{
int L,R;
ll vl,sum;
ll lv,rv;
ll tag;
Node(){
L=R=;
vl=sum=lv=rv=tag=0LL;
}
}st[MAXN<<];
ll cnt[MAXN];
void work(int k,ll v){
int len=st[k].R-st[k].L+;
st[k].vl+=cnt[len]*v;
st[k].sum+=len*v;
st[k].lv+=(+len)*len/*v;
st[k].rv+=(+len)*len/*v;
st[k].tag+=v;
}
Node Merge(Node A,Node B){
if(!A.L&&!A.R)return B;
if(!B.L&&!B.R)return A;
Node r;r.L=A.L,r.R=B.R;
int len1=A.R-A.L+,len2=B.R-B.L+;
r.sum=A.sum+B.sum;
r.vl=A.vl+B.vl+len2*A.rv+len1*B.lv;
r.lv=A.lv+len2*A.sum+B.lv;
r.rv=B.rv+len1*B.sum+A.rv;
return r;
}
void pushdown(int k){
if(st[k].tag){
work(k<<,st[k].tag);
work(k<<|,st[k].tag);
st[k].tag=;
}
}
void build(int k,int L,int R){
st[k].L=L,st[k].R=R;
if(L==R){
st[k].vl=,st[k].sum=;
st[k].lv=,st[k].rv=;
st[k].tag=;
}
else{
int mid=(L+R)>>;
build(k<<,L,mid);
build(k<<|,mid+,R);
st[k]=Merge(st[k<<],st[k<<|]);
}
}
Node query(int k,int a,int b){
int L=st[k].L,R=st[k].R;
if(a<=L&&R<=b){
return st[k];
}
else{
pushdown(k);
Node r;
int mid=(L+R)>>;
if(a<=mid)r=Merge(r,query(k<<,a,b));
if(b>mid)r=Merge(r,query(k<<|,a,b));
return r;
}
}
void add(int k,int a,int b,ll v){
int L=st[k].L,R=st[k].R;
if(a<=L&&R<=b){
work(k,v);
}
else{
pushdown(k);
int mid=(L+R)>>;
if(a<=mid)add(k<<,a,b,v);
if(b>mid)add(k<<|,a,b,v);
st[k]=Merge(st[k<<],st[k<<|]);
}
}
int n,m;
ll s1[MAXN],s2[MAXN];
void init(){
n=read(),m=read();
for(rint i=;i<=n;i++){
s1[i]=s1[i-]+i;
s2[i]=s2[i-]+1LL*i*i;
}
for(rint i=;i<=n;i++){
cnt[i]=(i+)*s1[i]-s2[i];
}
build(,,n);
}
ll gcd(ll a,ll b){return (!b?a:gcd(b,a%b));}
void solve(){
char s[];
int x,y;ll v;
while(m--){
scanf("%s%d%d",s,&x,&y);
y--;
if('C'==s[]){
scanf("%lld",&v);
add(,x,y,v);
}
else{
Node r=query(,x,y);
ll a=1LL*(y-x+)*(y-x+)/;
ll b=r.vl;
ll c=gcd(a,b);
a/=c,b/=c;
printf("%lld/%lld\n",b,a);
}
}
}
int main()
{
// freopen("data.in","r",stdin);
init();
solve();
return ;
}
洛谷P2221 [HAOI2012]高速公路的更多相关文章
- 洛谷 P2221 [HAOI2012]高速公路
链接: P2221 题意: 有 \(n(1\leq n\leq 10^5)\) 个点,从第 \(i(1\leq i< n)\) 个点向第 \(i+1\) 个点连有边.最初所有边长 \(v_i\) ...
- 洛谷P2221 [HAOI2012]高速公路(线段树+概率期望)
传送门 首先,答案等于$$ans=\sum_{i=l}^r\sum_{j=i}^r\frac{sum(i,j)}{C_{r-l+1}^2}$$ 也就是说所有情况的和除以总的情况数 因为这是一条链,我们 ...
- P2221 [HAOI2012]高速公路(线段树)
P2221 [HAOI2012]高速公路 显然答案为 $\dfrac{\sum_{i=l}^r\sum_{j=l}^{r}dis[i][j]}{C_{r-l+1}^2}$ 下面倒是挺好算,组合数瞎搞 ...
- 洛谷 P2220 [HAOI2012]容易题 数论
洛谷 P2220 [HAOI2012]容易题 题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数 ...
- 洛谷P2221 高速公路【线段树】
题目:https://www.luogu.org/problemnew/show/P2221 题意:有n个节点排成一条链,相邻节点之间有一条路. C u v val表示从u到v的路径上的每条边权值都加 ...
- 洛谷 P2505 [HAOI2012]道路 解题报告
P2505 [HAOI2012]道路 题目描述 C国有n座城市,城市之间通过m条单向道路连接.一条路径被称为最短路,当且仅当不存在从它的起点到终点的另外一条路径总长度比它小.两条最短路不同,当且仅当它 ...
- 洛谷 P1877 [HAOI2012]音量调节
P1877 [HAOI2012]音量调节 题目描述 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都需要改变一次音量.在演出开始之前,他已经做好一个列表,里面 ...
- 洛谷P1877 [HAOI2012]音量调节 [2017年4月计划 动态规划05]
P1877 [HAOI2012]音量调节 题目描述 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都需要改变一次音量.在演出开始之前,他已经做好一个列表,里面 ...
- 【题解】Luogu P2221 [HAOI2012]高速公路
原题传送门 这道题还算简单 我们要求的期望值: \[\frac{\sum_{i=l}^r\sum_{j=l}^rdis[i][j]}{C_{r-l+1}^{2}}\] 当然是上下两部分分别求,下面肥肠 ...
随机推荐
- hibernate框架学习错误集锦-org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.MANUAL)
最近学习ssh框架,总是出现这问题,后查证是没有开启事务. 如果采用注解方式,直接在业务层加@Transactional 并引入import org.springframework.transacti ...
- 【iOS】Swift类的继承、构造方法、析构器等复习
一.继承与重写, 防止重写 1.1 基类, 不继承任何类. Swift不想OC或者Java中继承自Object类.定义一个类,不继承任何类,该类就是基类. [java] view plaincopy ...
- 关于Android 7.0(API24)相机的问题汇总
在开发Android项目的时候,我们会用到相机,有些时候只是开发一个普通的扫码,仅仅赋予一下 权限 就好了,但是有些时候是需要拍照和从相册中获取照片的.我们在Android 5.0以及5.0之前调用相 ...
- nyoj 矩形个数
矩形的个数 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 在一个3*2的矩形中,可以找到6个1*1的矩形,4个2*1的矩形3个1*2的矩形,2个2*2的矩形,2个3 ...
- nyoj 孪生素数
孪生素数问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 写一个程序,找出给出素数范围内的所有孪生素数的组数.一般来说,孪生素数就是指两个素数距离为2,近的不能再 ...
- ThreadLocal源码分析:(三)remove()方法
在ThreadLocal的get(),set()的时候都会清除线程ThreadLocalMap里所有key为null的value. 而ThreadLocal的remove()方法会先将Entry中对k ...
- MapReduce工作机制——Word Count实例(一)
MapReduce工作机制--Word Count实例(一) MapReduce的思想是分布式计算,也就是分而治之,并行计算提高速度. 编程思想 首先,要将数据抽象为键值对的形式,map函数输入键值对 ...
- python中 return 的用法
return 语句就是讲结果返回到调用的地方,并把程序的控制权一起返回 程序运行到所遇到的第一个return即返回(退出def块),不会再运行第二个return. 要返回两个数值,写成一行即可: de ...
- python全栈开发-hashlib模块(数据加密)、suprocess模块、xml模块
一.hashlib模块 1.什么叫hash:hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 ...
- js、jQuery 获取文档、窗口、元素的各种值
基于两年开发经验,总结了 javascript.jQuery 获取窗口.文档.元素的各种值 javascript: 文档:是整个document所有的内容 浏览器当前窗口文档body的宽度: docu ...