传送门 线段树基本操作. 把那个方差的式子拆开可以发现只用维护一个区间平方和和区间和就可以完成所有操作. 同样区间修改也可以简单的操作. 代码: #include<bits/stdc++.h> #define N 300005 #define lc (p<<1) #define rc (p<<1|1) #define mid (T[p].l+T[p].r>>1) using namespace std; int n,m; double a[N]; struc…
传送门 看起来普通dp" role="presentation" style="position: relative;">dpdp像是有后效性的样子... 继续分析:如果我们第i+1列的最优值已经处理出来了,那么第i列的最优值就跟第i+1列没有关系了. 因为只要保证第i+1列至少挖到了第i-1行就行,如何保证?从第i+1列的第i-1行开始对第i列转移就行了,注意边界其实这题不难. 主要是要想到要从前一列的状态来推出当前列的状态. 事实上,如果我们用f…
传送门 一道感觉比较简单的dp. 注意是要求翻转一个子序列而不是一段连续的数(被坑了很多次啊)... 看到数据范围果断开一个四维数组来dp一波. 我们显然可以用f[i][j][k][t]表示下标在[l,r]内,值域在[k,t]之间且最多只会翻转一次能够生成的最长不下降子序列. 这不就简单了吗,从[l(+1),r(-1)]转移过来就三种情况. 第一种:该区间的值可以从[l+1,r]转移过来,如果a[l]=k的话对当前区间的贡献加1. 第二种:该区间的值可以从[l,r-1]转移过来,如果a[r]=t…
传送门 简单的线性dp" role="presentation" style="position: relative;">dpdp. 直接推一推就行了. 貌似三个状态会卡空间啊... 笔者分了两个阶段考虑状态转移. 代码: #include<bits/stdc++.h> #define N 5001 #define inf 0x3f3f3f3f using namespace std; char xxx; int n,t,f[N][N],…
洛谷 P1471 方差 题目背景 滚粗了的HansBug在收拾旧数学书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差. 输入输出格式 输入格式: 第一行包含两个正整数N.M,分别表示数列中实数的个数和操作的个数. 第二行包含N个实数,其中第i个实数表示数列的第i项. 接下来M行,每行为一条操作,格式为以下两种之一: 操作1:1 x y k ,表示将第x到第y项每项加上k,k为一实数. 操作2:2 x…
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含三个整数N.M.P,分别表示该数列数字的个数.操作的总个数和模数. 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值. 接下来M行每行包含3或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区间[x,y]内每个数乘上k 操作2: 格式:…
[题目背景:] 滚粗了的HansBug在收拾旧数学书,然而他发现了什么奇妙的东西. [题目描述:] 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差. [输入格式:] 第一行包含两个正整数N.M,分别表示数列中实数的个数和操作的个数. 第二行包含N个实数,其中第i个实数表示数列的第i项. 接下来M行,每行为一条操作,格式为以下两种之一: 操作1:1 x y k ,表示将第x到第y项每项加上k,k为一实数. 操作2:2 x y ,表示求出第x到第…
传送门 要求维护每个点上出现次数最多的颜色. 对于每次修改,我们用树上差分的思想,然后线段树合并统计答案就行了. 注意颜色很大需要离散化. 代码: #include<bits/stdc++.h> #define N 100005 #define Max 100000 using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigi…
传送门 给出n个带点权的点,支持连边和查询连通块第k大. 这个貌似就是一道线段树合并的裸板啊... 代码: #include<bits/stdc++.h> #define N 100005 using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigit(ch))ans=(ans<<3)+(ans<<1)…
蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差. ——by 洛谷; http://www.luogu.org/problem/show?pid=1471 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<…