洛谷 - P1198 - 最大数 - 线段树】的更多相关文章

https://www.luogu.org/problemnew/show/P1198 要问区间最大值,肯定是要用线段树的,不能用树状数组.(因为没有逆元?但是题目求的是最后一段,可以改成类似前缀和啊.不行!插入新元素之后更新的复杂度太高了!) 所以我们就弄一个初始元素是负数的最大值线段树,每次插入就是把末尾的元素 $update$ ,查询就是查询末尾的区间最大值,这样每次修改/查询的复杂度是 $O(nlogn)$ 的,非常给力. 所以说我又要到哪里抄一个线段树模板. 注意这个线段树是从1开始计…
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: 格式:…
首先这是一道线段树裸题,但是线段树长度不确定,那么我们可以在建树的时候,将每一个节点初始化为-INF,每次往队尾加一个元素即一次单节点更新,注意本题的数据范围,其实并不用开 long long,具体请看注释. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define lson l,mid,rt<<1 #define rson mid+…
这道题模拟一下可以过,但是我们发现线段树也可以安全水过...... 写的线段树只需要滋磁单点修改,区间求max即可 我一开始犯了一个很SB的错误:每次插入修改了t,然后疯狂爆0到怀疑人生... 而且我写的线段树还不明不白的碾了胡雨菲几年前写的. #include <cstdio> #include <algorithm> #include <iostream> using namespace std; ; typedef long long LL; LL mo; LL…
[题目背景:] 滚粗了的HansBug在收拾旧数学书,然而他发现了什么奇妙的东西. [题目描述:] 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差. [输入格式:] 第一行包含两个正整数N.M,分别表示数列中实数的个数和操作的个数. 第二行包含N个实数,其中第i个实数表示数列的第i项. 接下来M行,每行为一条操作,格式为以下两种之一: 操作1:1 x y k ,表示将第x到第y项每项加上k,k为一实数. 操作2:2 x y ,表示求出第x到第…
[题目描述:] 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L,都种有一棵树. 由于马路上有一些区域要用来建地铁.这些区域用它们在数轴上的起始点和终止点表示.已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分.现在要把这些区域中的树(包括区域端点处的两棵树)移走.你的任务是计算将这些树都移走后,马路上还有多少棵树. [输入格式:] 输入文件t…
[题目描述:] 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. [输入格式:] 输入一共有两行,第一行为n,k. 第二行为n个数(<INT_MAX). [输出格式:] 输出共两行,第一行为每次窗口滑动的最小值 第二行为每次窗口滑动的最大值 输入样例#: - - 输出样例#: - - - - 输入输出样例 [算法分析:]  线段树使用结构体同时维护区间最小值和最大值 没有修改只有建树和查询操…
[题目描述:] /* 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀着你玫瑰色的脸颊.我明白,我已经沉醉于你了.之后,经过几个月的观察和窥探,你的优雅与智慧,你对待生活的态度和你对未来的愿望深切地在我心中留下了印象.你是迷人的阳光女孩,我总是梦想着与你分享余生.唉,实际上你远远超过了我最疯狂的梦想.我不知道如何桥起我与你之间的鸿沟.所以我没有任何计划,仅仅只是等待,…
  https://www.luogu.org/problemnew/show/P5280 省选的时候后一半时间开这题,想了接近两个小时的各种假做法,之后想的做法已经接近正解了,但是有一些细节问题理不清楚(事实证明出来后再给我2个小时也还是没理清楚,只能说自己naive),而且也码不完,打了个20分暴力 参考资料:题解 首先,可以分开考虑各个点 对于每个点,考虑对于t次修改,每一次标记为启用或不启用(共有$2^t$种标记方案),其中有多少种标记方案使得这个点最后有tag 询问的答案就是每个点的答…
洛谷P3374 //询问区间和,支持单点修改 #include <cstdio> using namespace std; ; struct treetype { int l,r,sum; }; treetype a[*maxn]; int num[maxn]; void build(int k,int l,int r) { a[k].l=l;a[k].r=r; if (l==r) { a[k].sum=num[l]; return; } ,i=k<<; build(i,l,mid…
题目描述: 现在有 \(N\) 片雪花排成一列. Pty 要对雪花进行$ M $次染色操作,第 \(i\)次染色操作中,把\((i*p+q)%N+1\) 片雪花和第\((i*q+p)%N+1\)片雪花之间的雪花(包括端点)染成颜色 \(i\).其中 \(p\),\(q\) 是给定的两个正整数.他想知道最后 \(N\) 片雪花被染成了什么颜色. 输入格式 包含 4 行: \(N M p q\) 意义如题中所述. 输出格式 包含 \(N\) 行: 第 \(i\) 行表示第 \(i\) 片雪花被染成的…
题面传送门 神仙 ZJOI,不会做啊不会做/kk Sooke:"这八成是考场上最可做的题",由此可见 ZJOI 之毒瘤. 首先有一个非常显然的转化,就是题目中的"将线段树分裂成两棵线段树",我们事实上大可不必真的把线段树一分为二,可以看作对于操作集合 \(S\) 的所有子集 \(S'\subseteq S\) 计算出执行 \(S'\) 中的操作后线段树上有多少个节点 tag 为 \(1\). 其次建好线段树,我们考虑一次操作 \([l,r]\) 会对哪些节点产生影响…
传送门 无限Orz \(\color{black}S\color{red}{ooke}\)-- 思路 显然我们不能按照题意来每次复制一遍,而多半是在一棵线段树上瞎搞. 然后我们可以从\(modify\)函数入手,寻找一些性质. (盗一张Sooke的图) 可以发现每次\(modify\)之中,所有节点都可以被分成5类: 白色:经过而且标记全都被下传的点. 黑色:打上标记的点. 灰色:在修改区域内但不会被经过的点. 橙色:可以享受到来自上方标记的滋润的点. 黄色:半毛钱关系都没有的点-- 分类之后,…
题面 传送门 题解 考场上就这么一道会做的其它连暴力都没打--活该爆炸-- 首先我们得看出问题的本质:有\(m\)个操作,总共\(2^m\)种情况分别对应每个操作是否执行,求这\(2^m\)棵线段树上\(tag\)为\(1\)的节点个数 那么很明显得转化为每个节点在多少种情况里\(tag\)为\(1\) 对于一个操作\([ql,qr]\),我们把线段树上所有节点分成四类考虑 1.如果\(ql\leq l\&\&qr\geq r\),且该节点被访问到,那么不管之前操作序列怎么样,只要执行了当…
题目链接或者这吧.. 被数据坑了 /* 操作按左端点排个序 依次进行即可 不是很懂 为什么不写Build 而在Add时改mp[rt]=p 会WA(too short on line 251..) 找到Reason了..Modify下界写错 那么为什么单点修改正确性会被下界影响.. 又找到Reason了..数据有0 mmp */ #include<cstdio> #include<cctype> #include<algorithm> #define gc() getch…
[题目描述:] AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的01串. 2. 给定一个范围[l,r],伤害为伤害串的这个范围内中1的个数 3. 会被随机修改伤害串中的数值,修改的方法是把[l,r]中的所有数xor上1 AKN想知道一些时刻的伤害,请你帮助他求出这个伤害 [输入格式:] 第一行两个数n,m,表示长度为n的01串,有m个时刻 第二行一个长度为n的01串,为初始伤害串 第三行开始…
这两天学了很长时间于是做了一道水题 我就用了模板,就连任何优化都没有 就AC了,复杂度也很爆炸10个点1500多毫秒 这个题就是把lazy[]改成记录下修改的次数,每次修改的时候mod 2,因为反过来再返回去就一样了 修改变成 sum[root] = r - l + 1 - sum[root]; 其他的几乎就没区别了 #include<bits/stdc++.h> using namespace std; inline int read(){int s=0,w=1;char ch=getcha…
题目 题目链接 大意:维护一个数列,有两种操作: 查询操作Q  L:查询当前数列中末尾L个数中的最大的数 插入操作A  n:将n加上t再对D取模,将所得值插入数列末尾 解决方案 由题意知,只有两种操作:单点修改.区间查询 #include<bits/stdc++.h> using namespace std; typedef long long ll; << ; + ; ll maxv[maxn << ]; int n; ll mod; int ql, qr; //查询…
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int m,d,head,tail,pos; char op[2]; typedef long long ll; int q[200007],a[200007]; int main(){ while(~scanf("%d%d",&m,&d)){ int t=0,x;head=t…
\(\mathcal{Descrtiption}\)   给定 \(\{a_n\}\),现进行 \(m\) 次操作,每次操作随机一个区间 \([l,r]\),令其中元素全部变为区间最大值.对于每个 \(i\),求所有可能操作方案最终得到的 \(a_i\) 之和.答案模 \((10^9+7)\).   \(n,q\le400\). \(\mathcal{Solution}\)   那什么我懒得写题解了就把草稿贴上来好了.( \[f(i,l,r,x):=\text{the operating way…
「线段树」「单点修改」洛谷P1198 [JSOI2008]最大数 题面描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度.(L>0) 2. 插入操作. 语法:A n 功能:将nnn加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾. 限制:nnn是整数(可能为负数)并且在长整范围内.…
洛谷P1198:https://www.luogu.org/problemnew/show/P1198 思路 一道水水的线段树 20分钟A掉 这道题只涉及到单点修改和区间查询 所以这道题甚至不用Lazy-Tag 每次加入一个新的点就是修改一个节点 总区间长为操作次数m (假设所有操作都为添加一个节点) 因此题目就简单多了 代码 #include<iostream> using namespace std; #define ll long long #define Max 200000 #def…
洛谷 P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: L不超过当前数列的长度. (L>0) 2. 插入操作. 语法:A n 功能:将 n 加上 t ,其中 t 是最近一次查询操作的答案(如果还未执行过查询操作,则 t=0 ),并将所得结果对一个固定的常数 D 取模,将所得答案插入到数列的末尾. 限制: n是整数(可能为负数)并且在长整范围内.…
洛谷P1198 [JSOI2008]最大数 简单的线段树单点问题. 问题:读入A和Q时,按照读入一个字符会MLE,换成读入字符串就可以了. #include<bits/stdc++.h> using namespace std; #define lson l, mid, root << 1 #define rson mid + 1, r, root << 1 | 1 const int maxn = 200005; long long MAX[maxn <<…
To 洛谷.1198 最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作. 语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾. 限制:n是整数(可能为负数)并且在长整范围内. 注意:初始时数列是空的,没有一个数. 输入输出格式…
[BZOJ2830/洛谷3830]随机树(动态规划) 题面 洛谷 题解 先考虑第一问. 第一问的答案显然就是所有情况下所有点的深度的平均数. 考虑新加入的两个点,一定会删去某个叶子,然后新加入两个深度为原先叶子\(+1\)的点. 那么新加入的叶子的深度的期望是未加入之前的期望+1,假设\(f_i\)为\(i\)个点的期望. 那么\(f_i=(f_{i-1}*({i-1})-f_{i-1}+2*(f_{i-1}+1))/i=f_{i-1}+2/i\) 含义就是平均的深度乘上点的个数等于深度总和,减…
其实已经学了树状数组和线段树,然而懒得做题,所以至今没写多少博客 Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度.(L>=0) 2. 插入操作. 语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾. 限制:n是整数(可能为负数)并且在长整…
先上一波题目 https://www.luogu.org/problem/P1198 题目要求维护后缀最大值 以及在数列的最后面添加一个数 这道题呢我们有两种做法 1.单调栈 因为只需要维护后缀最大值 而我们每次插入都是在最后面添加一个数 所以我们可以维护一个单调栈 栈底到栈顶逐渐增大 因为如果一个数他的位置在你的前面且他比你小 那么他便不会对前面位置的最大值产生影响 可以直接省略 我们在查询的时候只需要二分一下答案 找到比查询位置后的最接近查询位置的数的值就是答案了 #include<cstd…
题目链接: https://www.luogu.org/problemnew/show/P1198 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:LL不超过当前数列的长度.(L > 0)(L>0) 2. 插入操作. 语法:A n 功能:将nn加上tt,其中tt是最近一次查询操作的答案(如果还未执行过查询操作,则t=0t=0),并将所得结果对一个固定的常数DD取模,将所得答案插入到数…
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:LLL不超过当前数列的长度.(L>0)(L > 0)(L>0) 2. 插入操作. 语法:A n 功能:将nnn加上ttt,其中ttt是最近一次查询操作的答案(如果还未执行过查询操作,则t=0t=0t=0),并将所得结果对一个固定的常数DDD取模,将所得答案插入到数列的末尾. 限制:nnn是整数(可能为负数)并且在长整范围内. 注意…