bzoj 5291: [Bjoi2018]链上二次求和】的更多相关文章

Description 有一条长度为n的链(1≤i<n,点i与点i+1之间有一条边的无向图),每个点有一个整数权值,第i个点的权值是 a_i.现在有m个操作,每个操作如下: 操作1(修改):给定链上两个节点u.v和一个整数d,表示将链上u到v唯一的简单路径上每个点权值都加上d. 操作2(询问):给定两个正整数L.r,表示求链上所有节点个数大于等于L且小于等于r的简单路径节点权值和之和. 由于答案很大,只用输出对质数1000000007取模的结果即可. 一条节点个数为k的简单路径节点权值和为这条上…
[BZOJ5291][BJOI2018]链上二次求和(线段树) 题面 BZOJ 洛谷 题解 考虑一次询问\([l,r]\)的答案.其中\(S\)表示前缀和 \(\displaystyle \sum_{i=l}^r\sum_{j=i}^n S_{j-i+1,j}=\sum_{i=l}^r\sum_{j=i}^nS_j-S_{j-i}=\sum_{i=l}^r(\sum_{j=i}^nS_j-\sum_{j=0}^{n-i}S_j)\) 转成二维前缀和的形式\(SS_i\),可以写成\(\displ…
原文链接http://www.cnblogs.com/zhouzhendong/p/9031130.html 题目传送门 - LOJ#2512 题目传送门 - 洛谷P4458 题目传送门 - BZOJ5291 推荐LOJ和洛谷,题面质量好,而且不卡常数. BZOJ题面烂,而且要卡那么一点点常数. 题意 有一条长度为$n$的链$\forall 1≤i<n$,点$i$与点$i+1$之间有一条边的无向图),每个点有一个整数权值,第$i$个点的权值是$a_i$​​.现在有$m$个操作,每个操作如下: 操…
用线段树对每种长度的区间维护权值和. 考虑区间[l,r]+1对长度为k的区间的贡献,显然其为Σk-max(0,k-i)-max(0,k-(n-i+1)) (i=l~r). 大力展开讨论.首先变成Σk-Σmax(0,k-i)-Σmax(0,k-(n-i+1)) (i=l~r). 第一部分是一个常数,线段树上是加了一个等差数列.打上标记即可. 后面两部分本质相同,现考虑Σmax(0,k-i) (i=l~r).去掉max,即Σk-i (i=l~min(r,k)).根据r和k的大小关系讨论.若r<=k,…
感觉自己做的麻烦了,但常数似乎不算差.(只是Luogu最慢的点不到2s本地要跑10+s) 感觉我的想法是最自然的,但不明白为什么网上似乎找不到这种做法.(不过当然所有的做法都是分类大讨论,而我的方法手算部分较为麻烦) 每次询问考虑每个位置的贡献,拆分成求所有长度<=R的区间的贡献次数和减去长度<L的区间贡献次数和. 分成两大类考虑,设当前考虑长度在[1,r]的所有区间,当前要计算数a[k]的贡献次数: 一: $2r\leq n$ 1.$k\leq r$ 观察所有包含k的长度不超过r的区间,发现…
传送门 线段树基础题. 题意:给出一个序列,要求支持区间加,查询序列中所有满足区间长度在[L,R][L,R][L,R]之间的区间的权值之和(区间的权值即区间内所有数的和). 想题555分钟,写题202020分钟,调题两小时真TMTMTM好玩 我们令sss表示前缀和,s2s^2s2表示前缀和的前缀和. 首先读完题发现要求的是: ∑i=lr∑j=in(sj−sj−i)\sum_{i=l}^r\sum_{j=i}^{n}(s_j-s_{j-i})∑i=lr​∑j=in​(sj​−sj−i​) =∑i=…
传送门 分析 咕咕咕 代码 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cctype> #include<cmath> #include<cstdlib> #include<queue> #include<ctime> #includ…
题面 传送门(loj) 传送门(洛谷) 题解 我果然是人傻常数大的典型啊-- 题解在这儿 //minamoto #include<bits/stdc++.h> #define R register #define ls (p<<1) #define rs (p<<1|1) #define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i) #define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)…
「BJOI2018」链上二次求和 https://loj.ac/problem/2512 我说今天上午写博客吧.怕自己写一上午,就决定先写道题. 然后我就调了一上午线段树. 花了2h找到lazy标记没有清空.我tm清空了有没有标记没清空标记本身. 又花25min找到某个乘法爆int了.int真的淡疼,要不是longlong自带巨无霸常数,这辈子都不想用int. 一个上午就没有了. //Achen #include<bits/stdc++.h> #define For(i,a,b) for(in…
题面 题解 转化一下可以变成所有小于等于r的减去小于等于l - 1的 然后我们求小于等于x的 显然是 \(\sum_{i = 1}^{n} \sum_{j = 1}^{min(i,x)} sum[i] - sum[i - j]\) 对于\([x,N - x]\)前缀和被加了\(x\)遍 对于\([1,N - x]\)前缀和被减了\(x\)遍 对于\([1,x - 1]\)前缀和被加了下标那么多遍 对于\([N - x + 1,N]\)前缀和被减了N - 下标遍 然后要维护什么就很清楚了 \(\s…