Solution -「ZJOI 2016」「洛谷 P3352」线段树
\(\mathcal{Descrtiption}\)
给定 \(\{a_n\}\),现进行 \(m\) 次操作,每次操作随机一个区间 \([l,r]\),令其中元素全部变为区间最大值。对于每个 \(i\),求所有可能操作方案最终得到的 \(a_i\) 之和。答案模 \((10^9+7)\)。
\(n,q\le400\)。
\(\mathcal{Solution}\)
那什么我懒得写题解了就把草稿贴上来好了。(
\forall i\in[l,r],a_i\le x \text{ and }a_{l-1},a_{r+1}>x.\\
f(i,l,r,x)=\left(\binom{l}{2}+\binom{r-l+2}{2}+\binom{n-r+1}{2}\right)f(i-1,l,r,x)\\
+\sum_{p<l}(p-1)f(i-1,p,r,x)+\sum_{r<p}(n-p)f(i-1,l,p,x).\\
\text{Thus, the answer for }i\text{ can be represented as }r_i\text{, where}\\
\begin{aligned}
r_i&=\sum_{x} x\sum_{[l,r]\ni i}f(q,l,r,x)-f(q,l,r,x-1)\\
&=\sum_{[l,r]\ni i}\sum_{x}-f(q,l,r,x)\\
&=\sum_{[l,r]\ni i}g(q,l,r)~~~~(g(i,l,r):=\sum_{x}-f(i,l,r,x)).
\end{aligned}\\
\text{Obviously, }g\text{'s expression is similar to }f\text{'s.}\\
\text{Maintaining partial sum, this problem can be solved in }\mathcal O(qn^2).
\]
\(\mathcal{Code}\)
/*~Rainybunny~*/
#include <bits/stdc++.h>
#define rep( i, l, r ) for ( int i = l, rep##i = r; i <= rep##i; ++i )
#define per( i, r, l ) for ( int i = r, per##i = l; i >= per##i; --i )
const int MAXN = 400, MOD = 1e9 + 7, IINF = 0x3f3f3f3f;
int n, m, a[MAXN + 5];
int g[2][MAXN + 5][MAXN + 5], sum[MAXN + 5];
inline int tot( const int u ) { return ( u * ( u + 1ll ) >> 1 ) % MOD; }
inline int mul( const int u, const int v ) { return 1ll * u * v % MOD; }
inline int sub( int u, const int v ) { return ( u -= v ) < 0 ? u + MOD : u; }
inline int add( int u, const int v ) { return ( u += v ) < MOD ? u : u - MOD; }
int main() {
scanf( "%d %d", &n, &m );
rep ( i, 1, n ) scanf( "%d", &a[i] );
a[0] = a[n + 1] = IINF;
rep ( l, 1, n ) {
int mxv = a[l];
rep ( r, l, n ) {
mxv = mxv < a[r] ? a[r] : mxv;
int mnv = a[l - 1] < a[r + 1] ? a[l - 1] : a[r + 1];
if ( mnv > mxv ) g[0][l][r] = sub( mxv, mnv < IINF ? mnv : 0 );
}
}
for ( int sta = 1, i = 1; i <= m; sta ^= 1, ++i ) {
memset( sum, 0, sizeof sum );
rep ( l, 1, n ) rep ( r, l, n ) {
g[sta][l][r] = add( sum[r], mul( add( add( tot( l - 1 ),
tot( r - l + 1 ) ), tot( n - r ) ), g[!sta][l][r] ) );
sum[r] = add( sum[r], mul( l - 1, g[!sta][l][r] ) );
}
memset( sum, 0, sizeof sum );
per ( r, n, 1 ) per ( l, r, 1 ) {
g[sta][l][r] = add( g[sta][l][r], sum[l] );
sum[l] = add( sum[l], mul( n - r, g[!sta][l][r] ) );
}
}
rep ( i, 1, n ) {
int ans = 0;
rep ( l, 1, i ) rep ( r, i, n ) ans = add( ans, g[m & 1][l][r] );
printf( "%d%c", ans, i < n ? ' ' : '\n' );
}
return 0;
}
Solution -「ZJOI 2016」「洛谷 P3352」线段树的更多相关文章
- 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...
- 洛谷P3374(线段树)(询问区间和,支持单点修改)
洛谷P3374 //询问区间和,支持单点修改 #include <cstdio> using namespace std; ; struct treetype { int l,r,sum; ...
- 洛谷 P5280 - [ZJOI2019]线段树(线段树+dp,神仙题)
题面传送门 神仙 ZJOI,不会做啊不会做/kk Sooke:"这八成是考场上最可做的题",由此可见 ZJOI 之毒瘤. 首先有一个非常显然的转化,就是题目中的"将线段树 ...
- 洛谷P5280 [ZJOI2019]线段树 [线段树,DP]
传送门 无限Orz \(\color{black}S\color{red}{ooke}\)-- 思路 显然我们不能按照题意来每次复制一遍,而多半是在一棵线段树上瞎搞. 然后我们可以从\(modify\ ...
- 洛谷.T21778.过年(线段树 扫描线)
题目链接或者这吧.. 被数据坑了 /* 操作按左端点排个序 依次进行即可 不是很懂 为什么不写Build 而在Add时改mp[rt]=p 会WA(too short on line 251..) 找到 ...
- 【洛谷】【线段树+位运算】P2574 XOR的艺术
[题目描述:] AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的01串. 2. 给定一个范围[ ...
- 【洛谷】【线段树】P1471 方差
[题目背景:] 滚粗了的HansBug在收拾旧数学书,然而他发现了什么奇妙的东西. [题目描述:] 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差 ...
- 【洛谷】【线段树】P1047 校门外的树
[题目描述:] 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L ...
- 【洛谷】【线段树】P1886 滑动窗口
[题目描述:] 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. [输入格式:] 输入一共 ...
随机推荐
- JSP页面中最常使用的脚本元素
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6513082449755374093/ 前面简单说了一个<JSP页面实际上就是Servlet>,接下来说 ...
- HTML5基本结构和语法
1.1HTML5文档基本结构 HTML5文档省略了<html>,<head>,<body>等元素,使用HTML5的DOCTYRE声明文档类型,简化<meta& ...
- ffmpeg+nginx截取屏幕实时画面并进行rtmp推流在前端播放
准备环境和文件 1.下载ffmpeg的包[https://foxbaby.lanzoui.com/iYjPmup51cd] 地址:https://ffmpeg.org/download.html#bu ...
- MicroPython 8266 配置
MicroPython 8266 配置 刷固件 下载固件 MicroPython - Python for microcontrollers 从以上网址下载固件,本文下载的是esp8266-20210 ...
- 使用Flightradar24's CesiumJS App追踪世界商用航线
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 每天,超过10万架商业航班在世界各地运送乘客.在任何特定时刻,您 ...
- golang中mutex使用
package main import ( "fmt" "sync" "time" ) /* 高并发是golang语言最大的亮点 一个线程可 ...
- 一份尽可能全面的Go channel介绍
写在前面 针对目前网络上Go channel知识点较为分散(很难有单独的一份资料把所有知识点都囊括进来)的情况,在下斗胆站在巨人的肩膀上,总结了前辈的工作,并加入了自己的理解,形成了这篇文章.本文类似 ...
- 学习MyBatis必知必会(7)~注解开发、动态SQL
一.MyBatis的注解开发 开发中推荐是使用xml文件配置 1.配置映射关系[使用注解的方式]: <!-- 全局的配置文件 --> <configuration> <! ...
- 从服务之间的调用来看 我们为什么需要Dapr
Dapr 相关的文章我已经写了20多篇了[1] . 当向其他人推荐Dapr 的时候,需要回答的一个问题就是: Dapr 似乎并不是特别令人印象深刻.它提供了一组"构建块",解决了与 ...
- APC 篇——总结与提升
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...