【BZOJ2752】【Luogu P2221】 [HAOI2012]高速公路
不是很难的一个题目。正确思路是统计每一条边被经过的次数,但我最初由于习惯直接先上了一个前缀和再推的式子,导致极其麻烦难以写对而且会爆\(longlong\)。
#include <bits/stdc++.h>
using namespace std;
const int N = 100000 + 5;
#define ls (p << 1)
#define rs (p << 1 | 1)
#define mid ((l + r) >> 1)
#define int long long
int n, m, sum1, sum2, sum3;
struct Segment_Tree {
int tag[N << 2], s1[N << 2], s2[N << 2], s3[N << 2];
Segment_Tree () {
memset (s1, 0, sizeof (s1));
memset (s2, 0, sizeof (s2));
memset (s3, 0, sizeof (s3));
memset (tag, 0, sizeof (tag));
}
void push_up (int p) {
s1[p] = s1[ls] + s1[rs];
s2[p] = s2[ls] + s2[rs];
s3[p] = s3[ls] + s3[rs];
}
int F1 (int x, int y) {return y - x + 1;} // \sum_{i = x} ^ {y} i ^ 0
int F2 (int x, int y) {return (x + y) * (y - x + 1) / 2;} // \sum_{i = x} ^ {y} i ^ 1
int F3 (int x, int y) {
x = x - 1;
int w1 = x * (x + 1) * (2 * x + 1) / 6;
int w2 = y * (y + 1) * (2 * y + 1) / 6;
return w2 - w1;
} // \sum_{i = x} ^ {y} i ^ 2
void work (int p, int l, int r, int val) {
s1[p] += F1 (l, r) * val;
s2[p] += F2 (l, r) * val;
s3[p] += F3 (l, r) * val;
tag[p] += val;
}
void push_down (int p, int l, int r) {
work (ls, l, mid + 0, tag[p]);
work (rs, mid + 1, r, tag[p]);
tag[p] = 0;
}
void modify (int nl, int nr, int w, int l = 1, int r = n, int p = 1) {
if (nl <= l && r <= nr) {
work (p, l, r, w);
return;
}
push_down (p, l, r);
if (nl <= mid) modify (nl, nr, w, l, mid, ls);
if (mid < nr) modify (nl, nr, w, mid + 1, r, rs);
push_up (p); return;
}
void query (int nl, int nr, int l = 1, int r = n, int p = 1) {
if (nl <= l && r <= nr) {
sum1 += s1[p];
sum2 += s2[p];
sum3 += s3[p];
return;
}
push_down (p, l, r);
if (nl <= mid) query (nl, nr, l, mid, ls);
if (mid < nr) query (nl, nr, mid + 1, r, rs);
push_up (p); return;
}
}tr; // 维护 \sum_{x = L}^{R} sumd(x)
int gcd (int x, int y) {
return y ? gcd (y, x % y) : x;
}
signed main () {
freopen ("data.in", "r", stdin);
cin >> n >> m;
for (int i = 1; i <= m; ++i) {
char opt; int l, r, v;
cin >> opt;
if (opt == 'C') {
cin >> l >> r >> v; r--;
tr.modify (l, r, v);
} else {
cin >> l >> r; r--;
sum1 = sum2 = sum3 = 0;
tr.query (l, r);
int w1 = (r - l + 1 - r * l);
int w2 = l + r;
int w3 = -1;
int upp = w1 * sum1 + w2 * sum2 + w3 * sum3;
int dwn = (r - l + 2) * (r - l + 1) / 2;
int d = gcd (upp, dwn); upp /= d, dwn /= d;
cout << upp << "/" << dwn << endl;
}
}
}
【BZOJ2752】【Luogu P2221】 [HAOI2012]高速公路的更多相关文章
- 【题解】Luogu P2221 [HAOI2012]高速公路
原题传送门 这道题还算简单 我们要求的期望值: \[\frac{\sum_{i=l}^r\sum_{j=l}^rdis[i][j]}{C_{r-l+1}^{2}}\] 当然是上下两部分分别求,下面肥肠 ...
- luogu P2221 [HAOI2012]高速公路题解
题面 很套路的拆式子然后线段树上维护区间和的题.一般都是把式子拆成区间内几个形如\(\sum i*a_i, \sum i^2 * a_i\)的式子相加减的形式. 考虑一次询问[l,r]的答案怎么算: ...
- P2221 [HAOI2012]高速公路(线段树)
P2221 [HAOI2012]高速公路 显然答案为 $\dfrac{\sum_{i=l}^r\sum_{j=l}^{r}dis[i][j]}{C_{r-l+1}^2}$ 下面倒是挺好算,组合数瞎搞 ...
- [Luogu 2221] HAOI2012 高速公路
[Luogu 2221] HAOI2012 高速公路 比较容易看出的线段树题目. 由于等概率,期望便转化为 子集元素和/子集个数. 每一段l..r中,子集元素和为: \(\sum w_{i}(i-l+ ...
- 洛谷 P2221 [HAOI2012]高速公路
链接: P2221 题意: 有 \(n(1\leq n\leq 10^5)\) 个点,从第 \(i(1\leq i< n)\) 个点向第 \(i+1\) 个点连有边.最初所有边长 \(v_i\) ...
- 洛谷P2221 [HAOI2012]高速公路
线段树 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> ...
- P2221 [HAOI2012]高速公路
思路 考虑每一条边的贡献,然后推式子 \[ \begin{align}&\sum_{i}V_i\times(R-i+1)\times(i-L+1)\\=&\sum_{i}V_i\lef ...
- 洛谷P2221 [HAOI2012]高速公路(线段树+概率期望)
传送门 首先,答案等于$$ans=\sum_{i=l}^r\sum_{j=i}^r\frac{sum(i,j)}{C_{r-l+1}^2}$$ 也就是说所有情况的和除以总的情况数 因为这是一条链,我们 ...
- BZOJ2752: [HAOI2012]高速公路(road)
2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 608 Solved: 199[Submit][ ...
- 【线段树】BZOJ2752: [HAOI2012]高速公路(road)
2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1621 Solved: 627[Submit] ...
随机推荐
- 使用docker-client创建NFS挂载
docker命令行挂载NFS如下: docker volume create --driver local --opt type=nfs --opt o=addr=192.168.11.129,rw ...
- YAML基础知识及搭建一台简洁版guestbook
一,前言 前面我们已经搭建过简易版k8s集群了,在此基础上可以搭建一个简洁版guestbook ,以便来学习k8s创建pod的整个过程. 二,在此之前,我们还需要学习一下YAML基础知识 YAML 基 ...
- PJzhang:shell基础入门的2个疗程-two
猫宁!!! 第6节:重定向 标准输入,标准输出,错误输出 输入重定向符号'<' 输出重定向符号'>'(清空之后再输入),'>>'(当前内容不变,在最后一行追加),'2>' ...
- xDeepFM
1. xDeepFM优势 自动高效的学习隐式和显示的高维特征交互 设计一个新的CIN网络可以显示学习高阶特征交互,且为Vector-Wise 2. xDeepFM整体算法框架 整个网络结构主要分 ...
- linux上传文件的命令——rz
下面来看一下有关上传下载的说明. 1.rz.sz命令的安装方法 第一种方法:安装系统时选包包含rz.sz命令的包组 第二种方法:安装系统后通过执行yum install lrzsz -y 或 yum ...
- [ZJOI2007]捉迷藏(动态点分治/(括号序列)(线段树))
题目描述 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N-1条 ...
- HDU 1203 I NEED A OFFER! (动态规划、01背包、概率)
I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- MVC与MTV模型及Django请求的生命周期
MVC模型 MVC:Model View Controller M: 模型.是应用程序中用于处理应用程序数据逻辑的部分 V:视图.是应用程序汇总处理数据显示的部分 C:控制器.是应用程序中处理用户交互 ...
- 医院医疗类报表免费用,提反馈,还能赢取P30!
医院医疗类报表免费用,提反馈,还能赢取P30! “葡萄城报表模板库是一款免费的报表制作.学习和参考工具,包含了超过 200 张高质量报表模板,涵盖了 16 大行业和 50 多种报表类型,为 30 余万 ...
- 云数据库RDS SQL Server 版
云数据库RDS SQL Server版是一种可弹性伸缩的在线数据库服务,并具备自动监控.备份.容灾恢复等方面的全套解决方案,彻底解决数据库运维的烦恼 请观看视频简介 SQL Server是发行最早的商 ...