洛谷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}}\] 当然是上下两部分分别求,下面肥肠 ...
随机推荐
- 【Alpha版本】冲刺阶段 - Day3 - 逆风
今日进展 袁逸灏:右上角两个按键的添加与实现监听(5h) 刘伟康:继续借鉴其他 alpha 冲刺博客,由于我们组的App原型可以在 alpha 阶段完成,所以不需要墨刀工具展示原型(2h) 刘先润:更 ...
- Alpha阶段小结
1 团队的源码仓库地址 https://github.com/WHUSE2017/MyGod 2 Alpha过程回顾 2.1 团队项目预期 有一个可视化的安卓APP,实现二手交易基本功能.预期的典型用 ...
- 使用 VSCode 编写 .NET Core 项目之初体验
注:本文在根据 微软官方文档指导下,根据自己的学习中整理,并不完全照搬文档,但也大体和文档学习路线相似,主要为记录学习过程. 官方学习地址: https://code.visualstudio.com ...
- 04_Linux目录文件操作命令1(mv ls cd...)_我的Linux之路
上一节已经给大家讲了Linux的目录结构,相信大家已经对Linux的整个目录结构有所了解 现实中,服务器(包含Linux,Unix,windows server)一般都摆放在机房里,因为一个机房摆放了 ...
- PHP分页初探 一个最简单的PHP分页代码的简单实现
PHP分页代码在各种程序开发中都是必须要用到的,在网站开发中更是必选的一项. 要想写出分页代码,首先你要理解SQL查询语句:select * from goods limit 2,7.PHP分页代码核 ...
- node框架express
见识到原生nodeJs服务器的恶心后,我们来用下简单好用的框架吧~ 服务器无非主要提供接口和静态文件读取,直接上代码: const express = require('express'); cons ...
- c#动态加载卸载DLL
前段时间工作的时候遇到一个问题.就是需要每次启动程序的时候动态替换掉某个dll,所以就百度了这方面的资料.这次记录下来让自己以后可以看. 根据自己的理解,动态卸载dll需要有以下条件: 1:dll在加 ...
- 【转】optach学习
[转自:https://yq.aliyun.com/articles/28007,仅作学习用途] 摘要: Opatch 是oracle公司开发的安装,卸载,检测patch冲突的工具,管理oracle所 ...
- JavaScript 基础学习1-day14
JavaScript 基础学习1 知识预览JavaScript概述二 JavaScript的基础三 JavaScript的对象BOM对象DOM对象实例练习js扩展 JavaScript概述 JavaS ...
- Mego开发文档 - 建模高级主题
建模高级主题 在建模过程中我们还有许多其他情况,这里列出本框架中的有用特性来用于解决此类问题. 函数映射 我们可以将指定的CLR函数映射到数据库中的系统函数或自定义函数,该特性用于补充框架中未提供的数 ...