hdu-5306(区间最值+线段树) hduGorgeous SequenceHDU - 5306 题意:给定一个长度为n的区间,做m次操作,三种操作对于序列[L,R]区间中的每个ai,用min(ai,x)替换。 打印序列[L,R]区间的最大值 打印序列[L,R]区间和因为区间和与区间最值无关,所以无法直接用简单的标记处理。
吉司机线段树,通常就是比正常的线段树多维护了个次的东西,比若说这题,我们可以维护一个次大值,如果该区间的最大值小于修改的v,那么直接return,如果大于次大值,那么也就是说只有最大值需要修改,那么我们记录一下最大值的个数,修改的时候我们直接对sum+(最大值-val)乘上最大值的数量就好了,然后将该区间的最...
1#include<iostream>2#include<string>3#include<algorithm>4#include<cstdio>5#include<vector>6#include<queue>7#defineN 10000058usingnamespacestd;9structNode10{11intr,l,id;12booloperator<(Node a)const{returnl>a.l;}//为了优先队列的优先级的排列,>队列顶端是最小的,反之是最大的13}soda[N];14in...
}tr[2100000];inttrlen,a[1100000];voidupdate(intnow) {intlc=now<<1,rc=now<<1|1; tr[now].sum=tr[lc].sum+tr[rc].sum; tr[now].mx=max(tr[lc].mx,tr[rc].mx); tr[now].mxc=0;if(tr[lc].mx==tr[now].mx)tr[now].mxc+=tr[lc].mxc;if(tr[rc].mx==tr[now].mx)tr[now]...
HDU 5306 Gorgeous Sequence 思路 学了个新科技叫势能线段树(又叫吉司机线段树) 好像是吉老师发明的XD 思路很简单,维护一个最大值max、严格次大值sec、最大值出现次数num、总和sum 然后操作1,2都是正常操作,操作0有几种特殊情况 第一种:c>=maxx,可以直接返回 第二种:c<maxx&&c>sec,只影响最大值,直接...
1 x y: Print the maximum value of ai that x≤i≤y.(区间求最大値) 2 x y: Print the sum of ai that x≤i≤y.(区间求和) Analysis: “>http://codeforces.com/contest/444/problem/C 暴力的线段树。 + expand source 我们发现主要瓶颈是打标记这个步骤,因为在标记作用上的时刻,我们不知道它的...
吉司机线段树用于维护区间[l,r]对x取最小值,区间查询最小值和区间求和. #include<bits/stdc++.h>using namespacestd;typedeflonglongll;constintN =1e6+10;structnode{intl,r; ll mx; ll se;intcnt; ll sum; }; ll arr[N]; node tr[N<<2];voidpushdown(intrt){if(tr[rt<<1].mx > tr[rt...
【HDU5306】Gorgeous Sequence 这个题目是Segment-Tree-beats的论文的第一题。 首先我们考虑下这个问题的不同之处在于,有一个区间对x取max的操作。 那么如何维护这个操作呢? 就是对于线段树的区间,维护一个最大值标记,最大值出现次数,以及严格次大值。
HDU5306 Gorgeous Sequence (jls线段树) 3个操作: 1.区间最值修改。 2.区间求最值。 3.区间求和。 思路:开一个变量m x , s e mx,semx,se维护区间最大值和严格次大值,再开一个c n t cntcnt,维护区间最大值的个数。 时间复杂度:O ( ( n + m ) l o g n ) O((n+m)logn)O((n+m)logn...
HDU - 5306: Gorgeous Sequence (势能线段树),Thereisasequence aa oflength nn.Weuse aiai todenotethe ii-thelementinthissequence.Youshoulddothefollowingthreetypesofoperationst