【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] ...
随机推荐
- 组件推荐Forloop.HtmlHelpers 用来实现MVC的js加载顺序
最近在开发的时候遇到js加载顺序的问题,layui在底部声明了js,但是我想在页面其他地方使用分布视图,分布视图内有自己的js逻辑,发现不能执行,一看就发现,这里的js应该加在layui后面执行才能有 ...
- mybatis学习 (五) POJO的映射文件
Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. 1.parameterType(输入类型) 通过parameterType ...
- Replace Words
In English, we have a concept called root, which can be followed by some other words to form another ...
- 设置mysql 5.7 可以外部访问的办法
这里记录一下. 一台服务器上面的mysql出现了 无法外面连的情况解决办法: . 先尝试在宿主机上面登录 mysql -uroot -p 输入密码,可以登录. 然后 use mysql # 切换数据库 ...
- [转帖]微软 SQL Server 2008/R2 停止支持
微软 SQL Server 2008/R2 停止支持 微软停止支持 SQLSERVER 2008R2 https://t.cj.sina.com.cn/articles/view/3172142827 ...
- [转帖]Java 8新特性探究 前言
Java 8新特性探究 前言 https://my.oschina.net/benhaile/blog/174136 讲下java的历史 感觉挺好的. 评论 17 jdk8java8javase新特性 ...
- ARM Cortex-M 系列 MCU 错误追踪库 心得
一. 感谢CmBacktrace开源项目,git项目网站:https://github.com/armink/CmBacktrace 二. 移植CmBacktrace 2.1 准备好CmBacktra ...
- IDEA项目目录里下找不到src,但是src确实存在的的解决方案
写代码的时候可能出现写着写着src就找不到了,我个人认为是触发了热键导致src被隐藏了,下面就是设置src可见和不可见的操作 这个其实是被隐藏了,打开就好,位置如下:
- Java服务,内存OOM问题如何快速定位? (转)
转自:公众号 架构师之路 问题:有一个Java服务出现了OOM(Out Of Memory)问题,定位了好久不得其法,请问有什么好的思路么? OOM的问题,印象中之前写过,这里再总结一些相对通用的方 ...
- C# 文件基本操作
概括的说,File,FileInfo,FileStream是用于文件 I/O 的类,StreamReader是用于从流读取和写入流的类,使用之前都需using System.IO. 先定义一个TXT文 ...