E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
HNOI2016
BZOJ4540
Hnoi2016
序列 【莫队+RMQ+单调栈预处理】*
BZOJ4540Hnoi2016序列Description给定长度为n的序列:a1,a2,…,an,记为a[1:n]。类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,…,ar-1,ar。若1≤l≤s≤t≤r≤n,则称a[s:t]是a[l:r]的子序列。现在有q个询问,每个询问给定两个数l和r,1≤l≤r≤n,求a[l:r]的不同子序列的最小值之和。例如,给定序列5,2,4,1,3,
Dream_Maker_yangkai
·
2018-07-31 10:47
c++
BZOJ
莫队
算法
好题
「
HNOI2016
」最小公倍数
「
HNOI2016
」最小公倍数题目描述给定一张NNN个顶点MMM条边的无向图(顶点编号为1,2,⋯,n1,2,\cdots,n1,2,⋯,n),每条边上带有权值。
Echo宝贝儿
·
2018-05-04 14:00
[
HNOI2016
]树
题意给你一颗模板树,一颗大树初始等于模板树先有一堆操作表示把模板树中以uu为根的子树复制一下接到大树的第yy号节点上然后进行重新标号,新节点的编号==大树原总结点数++这个节点在模板树那颗子树里的排名然后一堆询问.问大树上两个节点的距离题解一道十分毒瘤并且不好实现的代码题建树我们把大树上的每一整块缩成一个点,这样大树的点数就是线性的了(下面的图都是样例)我们可以预处理两个块根节点之间的信息,然后其
BeNoble_
·
2018-04-02 10:01
主席树
树剖
BZOJ4540: [
Hnoi2016
]序列 (线段树)
传送门题解:这道题的线段树做法好神啊。。考虑直接从11扫描到nn,不断更新1~i1~i到ii的最小值。那么显然我们要对线段树支持区间覆盖,区间求历史和。然后我们可以构造矩阵来完成,对于每个节点构造⎛⎝⎜⎜svallen⎞⎠⎟⎟(svallen)即可完成区间覆盖。(主要是多维护了一个lenlen)查询直接求和即可。#includetypedeflonglongLL;usingnamespacestd
DZYO
·
2018-03-04 10:05
DP及DP优化
线段树
【
HNOI2016
模拟4.1】神奇的字符串
Description:(1#include#definefo(i,x,y)for(inti=x;im)change(t[i].r,m+1,y,l,r,c);elsechange(t[i].l,x,m,l,m,c),change(t[i].r,m+1,y,m+1,r,c);}voidgai(intl,intr,intc){if(l<=r)change(1,0,n-1,l,r,c);elsechan
Cold_Chair
·
2017-08-04 21:42
杂题
bzoj 4540: [
Hnoi2016
]序列 (莫队+ST表+单调栈|线段树)
题解传送门题目大意:给定长度为n的序列:a1,a2,…,an,记为a[1:n]。类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,…,ar−1,ar。若1≤l≤s≤t≤r≤n,则称a[s:t]是a[l:r]的子序列。现在有q个询问,每个询问给定两个数l和r,1≤l≤r≤n,求a[l:r]的不同子序列的最小值之和。例如,给定序5,2,4,1,3,询问给定的两个数为1和3,那么a[1:3
clover_hxy
·
2017-03-07 21:23
线段树
RMQ算法
单调栈
莫队
[BZOJ4537][
Hnoi2016
][分块]最小公倍数
很神的做法……第一眼以为是cdq分治加lct(排序a,分治b)敲完lct模板发现处理不了某条边a很大b很小的情况……把边按a排序,分成B块,第i块的a的权值范围为[Li,Ri],那么对于询问j,aj在[Li,Ri]的范围内,把这一块以及这一块之前ai#include#include#include#defineN100010usingnamespacestd;intn,m,q,block,sz;c
LowestJN
·
2017-02-23 15:12
[BZOJ4539][
Hnoi2016
]树(倍增+LCA+主席树)
======这里放传送门======题解这题某天学长出过胡策。。第一眼拿到题,woc,这不就是个裸倍增?第二眼,woc,节点数最大到1e10,这是要死的节奏。。。这题写起来真·麻烦死人。。基本思路是每次把复制的模板树的那个子树缩成一个点,初始的那一整个模板树也缩成一个点,那么大树上最多只会有m+1个点。然后每次查询的时候就可以先定位在模板树上的节点,再在大树上跑倍增,最后再定位到模板树上的具体节点
FromATP
·
2017-02-16 21:35
BZOJ
主席树算线段树吗
各种跟倍增有关的东西
4539: [
Hnoi2016
]树
4539:[
Hnoi2016
]树TimeLimit:40SecMemoryLimit:256MBSubmit:479Solved:183[Submit][Status][Discuss]Description
CRZbulabula
·
2016-12-03 22:20
dfs
树
主席树
倍增
BZOJ4537 [
HNOI2016
] 最小公倍数 (按轶合并带权并查集+分块离线)
太弱啦,看了题解才知道怎么做离线算法:对于单组询问x,y,a,b,我们可以将边权小于a的点全部加入带权并查集,然后判断x,y所在的并查集里面最大的权值是否为b。对于多组询问,我们采用分块离线的算法。将边权按a为第一关键字升序排序,每k个分一组,总共有m/k组。对于在这个分组之前的所有分组和当前分组内的边,按b为第一关键字升序排序,记录下在这个块内需要被统计的答案。对块内询问按b为第一关键字升序排序
HbFS-
·
2016-09-26 19:17
分块
[BZOJ4539][
Hnoi2016
]树(dfs序+主席树+lca)
题目描述传送门题解可以看出在原树上的每一次复制都是一棵完整的子树,用dfs序表示出来就是一段连续的区间。称原来给的大小为n的树为模板树,最后得到的树为答案树,把一次操作增加的节点看成一块,然后构成的树称为大树。我们就需要将模板树和答案树结合起来计算答案。答案树上两点的距离=两点分别走到所在块的根,在大树上走到两个块的lca,撤销进入块lca后两个点共同走过的路径。第一步的答案就是找到点到它所在块的
Clove_unique
·
2016-08-05 18:11
题解
lca
省选
可持久化
dfs序
bzoj 4539: [
Hnoi2016
]树(缩点+主席树+lca)
4539:[
Hnoi2016
]树TimeLimit:40SecMemoryLimit:256MBSubmit:442Solved:173[Submit][Status][Discuss]Description
clover_hxy
·
2016-08-04 19:51
倍增
LCA
主席树
bzoj4541【
HNOI2016
】矿区
4541:[
Hnoi2016
]矿区TimeLimit: 30Sec MemoryLimit: 512MBSubmit: 282 Solved: 123[Submit][Status][Discuss
AaronGZK
·
2016-06-14 00:00
bzoj
平面图转对偶图
DFS树
bzoj4540【
HNOI2016
】序列
4540:[
Hnoi2016
]序列TimeLimit:20SecMemoryLimit:512MBSubmit:619Solved:302[Submit][Status][Discuss]Description
AaronPolaris
·
2016-06-13 00:40
好题
单调栈
前缀和
莫队算法
分块
OIer的狂欢
bzoj4540【
HNOI2016
】序列
4540:[
Hnoi2016
]序列TimeLimit: 20Sec MemoryLimit: 512MBSubmit: 619 Solved: 302[Submit][Status][Discuss
AaronGZK
·
2016-06-13 00:00
单调栈
莫队算法
前缀和
bzoj
bzoj4539【
HNOI2016
】树
4539:[
Hnoi2016
]树TimeLimit:40SecMemoryLimit:256MBSubmit:415Solved:157[Submit][Status][Discuss]Description
AaronPolaris
·
2016-06-13 00:23
bzoj
可持久化线段树
树分块
线段树
好题
可持久化数据结构
分块
OIer的狂欢
bzoj4539【
HNOI2016
】树
4539:[
Hnoi2016
]树TimeLimit: 40Sec MemoryLimit: 256MBSubmit: 415 Solved: 157[Submit][Status][Discuss]
AaronGZK
·
2016-06-13 00:00
bzoj
可持久化线段树
树分块
bzoj4538【
HNOI2016
】网络
4538:[
Hnoi2016
]网络TimeLimit: 20Sec MemoryLimit: 128MBSubmit: 651 Solved: 300[Submit][Status][Discuss
AaronGZK
·
2016-06-11 23:00
线段树
树链剖分
bzoj
bzoj4537【
HNOI2016
】最小公倍数
4537:[
Hnoi2016
]最小公倍数TimeLimit:40SecMemoryLimit:512MBSubmit:563Solved:236[Submit][Status][Discuss]Description
AaronPolaris
·
2016-06-11 23:04
好题
分块
OIer的狂欢
bzoj4537【
HNOI2016
】最小公倍数
4537:[
Hnoi2016
]最小公倍数TimeLimit: 40Sec MemoryLimit: 512MBSubmit: 563 Solved: 236[Submit][Status][Discuss
AaronGZK
·
2016-06-11 23:00
分块
bzoj
【bzoj4538】[
Hnoi2016
]网络
我们考虑树剖,线段树上维护一个堆,保存不经过该段区间的路径的权值。 对于一条路径我们将对于线段树中的区间提取出来,在对于线段树中进行修改。也就是在堆中插入或删除。 对于一次询问,只要找到包含该点的线段中堆顶权值最大的就行了。 1#include 2#include 3#include 4#include 5#include 6#include 7#include 8usingname
Yangjiyuan
·
2016-05-14 08:00
bzoj4542【
HNOI2016
】大数
4542:[
Hnoi2016
]大数TimeLimit: 20Sec MemoryLimit: 128MBSubmit: 801 Solved: 282[Submit][Status][Discuss
AaronGZK
·
2016-05-11 00:00
bzoj
莫队算法
bzoj4542【
HNOI2016
】大数
4542:[
Hnoi2016
]大数TimeLimit: 20Sec MemoryLimit: 128MBSubmit: 801 Solved: 282[Submit][Status][Discuss
AaronGZK
·
2016-05-11 00:00
bzoj
莫队算法
进化成弃坑大师
HEOI2016,写到最后发现有个NTT挡路..写HAOI2016,写到最后发现那个仙人掌上的线段树合并太难写了根本写不动..写SCOI2016结果发现写完D1T2,D1T3剩下的题都不想看了…写JLOI2016和
HNOI2016
CreationAugust
·
2016-05-06 17:43
随便搞搞
进化成弃坑大师
HEOI2016,写到最后发现有个NTT挡路..写HAOI2016,写到最后发现那个仙人掌上的线段树合并太难写了根本写不动..写SCOI2016结果发现写完D1T2,D1T3剩下的题都不想看了…写JLOI2016和
HNOI2016
CreationAugust
·
2016-05-06 17:00
【BZOJ4540】【
Hnoi2016
】序列 线段树
Claris劲啊!CA劲啊!%%%两位线段树做法传送门在这里和这里逆向题解时间到:首先将询问按照终点排序,并且一边从到遍历,不妨设当前遍历到了点,对于之前的每个点,我们维护两个值和。(之后的点的两个值都先设成0)其中表示从这个点到之间序列A的最小值,而,表示从我们遍历第一个点到当前的所有时刻下的各个历史版本的和。(当遍历的点在这个点之前等于零)(事实上。)不(很)难发现对于每一个询问,当且仅当时,
qq_34637390
·
2016-05-04 11:00
bzoj 4539: [
Hnoi2016
]树
开始读错题了,以后一定要好好读题!!!称原来给的大小为n的树为模板树,最后得到的树为答案树,把一次操作增加的节点看成一块,然后构成的树称为大树。答案树上两点的距离=两点分别走到所在块的根,在大树上走到两个块的lca,撤销进入块lca后两个点共同走过的路径。第一步的答案就是找到点到它所在块的根在原树中的距离第二步,把大树上两点之间的边权定义为答案树上这两个块的根的距离,然后倍增lca求出第三步,要知
heheda_is_an_OIer
·
2016-04-30 11:00
BZOJ4535 [
Hnoi2016
]树
考虑每次复制操作,我们只需要知道复制这个子树的根以及原树就能知道新树里这一部分的形态,所以我们把每次复制操作复制的子树和最开始的一颗树都缩点,给每个缩点记录在原树里的根,父亲在原树里的编号。每个缩点和父亲缩点的距离为父亲在原树里与缩点父亲的根在原树里的距离+1,也就是这个缩点树的根到上一个缩点树的根在新树里的距离,维护原树和缩点树两个树倍增结构,询问的时候根据LCA在缩点树里的位置分类讨论即可为了
neither_nor
·
2016-04-29 13:00
BZOJ4540 [
Hnoi2016
]序列
和xuruifan讨论了半天,然后orz了一下网上题解“预处理一些东西,然后莫队”……于是YY了半天预处理啥终于YY了出来对于一次添加操作,会对答案做出一些贡献,在其他条件相同的情况下删除这个数的贡献和添加的贡献一样,在左边添加和在右边添加一样,所以我们只讨论在左边添加的情况首先单调栈预处理一下每个数左边和右边第一个比他小的数的位置,两个位置之间称为这个数的覆盖区间然后预处理一下假设右端点在序列末
neither_nor
·
2016-04-29 13:48
莫队
rmq
BZOJ
BZOJ4540 [
Hnoi2016
]序列
和xuruifan讨论了半天,然后orz了一下网上题解“预处理一些东西,然后莫队”……于是YY了半天预处理啥终于YY了出来对于一次添加操作,会对答案做出一些贡献,在其他条件相同的情况下删除这个数的贡献和添加的贡献一样,在左边添加和在右边添加一样,所以我们只讨论在左边添加的情况首先单调栈预处理一下每个数左边和右边第一个比他小的数的位置,两个位置之间称为这个数的覆盖区间然后预处理一下假设右端点在序列末
neither_nor
·
2016-04-29 13:00
[
Hnoi2016
]序列 解题报告
我们考虑从左往右扫右端点和从右往左扫左端点的两遍扫描线。(以下选取从左往右的扫描线来说明)考虑每个点向它左边第一个比它大的点连边形成的树。设i左边第一个比它大的点的坐标是lasti(如果没有则lasti=0),i右边第一个比它大的点的坐标是nexti(如果没有则nexti=n+1)。设[l,r]的最小值的坐标是x,则从r到x的路径上的点y的贡献是ay∗(y−lasti)∗(r−y+1)(不包括x,
TA201314
·
2016-04-26 10:00
栈
分治
扫描线
bzoj4262: Sum
id=4262思路:写这题之前推荐先写uoj164类似做法的还有
HNOI2016
序列(我拿莫队水过了)也是维护一个函数性质标记题解见:http://www.cnblogs.com/clrs97/p/4824806
thy_asdf
·
2016-04-26 10:00
4537: [
Hnoi2016
]最小公倍数|分块
暴力的做法就是直接找到所有a,b都小于等于某个询问的边然后并查集合并,维护每个集合的a,b得最大值看是否等于询问的a,b然后就可以考虑分块,把边按照a排序,每隔n−√分为一块块前的按照b值排序按顺序插入,块内的暴力判断,并查集合并,每次都把块内合并的记录下来,处理完某个询问时就撤回并查集的操作块的大小为n−√可能会T改成n∗log2n−−−−−−−−√可能会快一点#include #include
ws_yzy
·
2016-04-24 14:00
分块
4542: [
Hnoi2016
]大数|莫队
HN一天考两个莫队是什么鬼..或者说莫队不是正确的姿势..?考虑已经知道了l..r的答案新添入r+1如何更新当前答案需要先预处理出后缀modp的值bi,假设子序列l..r模p的值为x那么x∗10r−l+b[r]=b[l]然后就可以直接莫队统计了模数为2或5的时候要特判一下#include #include #include #include #include #include #include #
ws_yzy
·
2016-04-23 19:00
莫队
[Contest]
Hnoi2016
题目汇总
把最近做的hnoi汇总一下按做的顺序排好了大数:莫队————————————线割分是我>wwwww<———————————————– 树:void
u014609452
·
2016-04-23 10:00
4540: [
Hnoi2016
]序列|莫队+ST表
考虑现在已经知道了[l,r]的答案新添入一个r+1如何更新答案也就是右端点在r+1处左端点在l..r+1之间的所有的子序列的答案可以找出l..r中最小的数的位置p,然后p以及p左侧作为左端点的答案就可以直接计算了考虑左端点在p+1....r+1时对答案的贡献,可以与处理一个前缀和Si表示以i为右端点的所有子序列的答案之和那么左端点在p+1....r+1时对答案的贡献就是Sr+1−Sp其他端点移动的
ws_yzy
·
2016-04-23 09:00
莫队
[分块 并查集] BZOJ 4537 [
Hnoi2016
]最小公倍数
题解:http://www.cnblogs.com/y7070/p/5412793.html暴力分块”对于每一组,将符合一组a的询问选出来,将这些询问和这一块之前的边(a一定小于这些询问)按b排序,然后交替插入,询问,对于一个询问,在当前块也有可能有满足的边,我们将其加入,考虑后并撤销“#include #include #include #include usingnamespacestd;
u014609452
·
2016-04-22 10:00
bzoj 4538: [
Hnoi2016
]网络
查询的是不包含x的链的权值最大值。树链剖分后,每条链变成O(logn)个区间,那么未被这个链包含的也有logn个区间,在这logn个区间上做修改即可。因为有删除操作,每个线段树节点开一个堆维护。 #include #include #include #include #include #include #definelllonglong #defineinf1
heheda_is_an_OIer
·
2016-04-21 14:00
[树链剖分 线段树 堆] BZOJ 4538 [
Hnoi2016
]网络
裸的树链剖分线段树里套个堆最暴力的打法还有一种做法是考虑二分答案,如果大于答案的边都经过询问点,则往小的二分否则往大的二分。这样我们只要维护路径的交集。用rmq求lca的话可以做到O(1)求出两条路径的交集。可以离散后用线段树维护二分结构,并在对应的节点上记录路径交集#include #include #include #include #defineVG[p].v #defineoo1abcd;
u014609452
·
2016-04-21 13:00
bzoj 4540: [
Hnoi2016
]序列
题意坑爹,不需要判断两个子串是否相等。然后这道题几乎就是bzoj4262了。除了线段树做法,还可以用莫队用单调队列预处理出L[i]表示i左边第一个小于a[i]的位置,R[i]表示i右边第一个小于a[i]的位置。fl[i]表示以i为左端点的所有区间的答案,=a[i]*(R[i]-i)+fl[R[i]],因为[i,R[i])位置的贡献都是a[i],[R[i],n]这个区间的答案与fr[R[i]]相同。
heheda_is_an_OIer
·
2016-04-21 11:00
bzoj 4542: [
Hnoi2016
]大数
在p!=2且p!=5的情况下,x*10^k%p=0,则x%p=0,所以可以维护后缀和%p的值,然后用莫队求区间内相同的数的对数。p=2orp=5最后一位决定%p之后的值,yy一下即可 #include #include #include #include #include #include #definelllonglong #defineinf1e9 #
heheda_is_an_OIer
·
2016-04-21 09:00
【
HNOI2016
】【BZOJ4540】序列
Description给定长度为n的序列:a1,a2,…,an,记为a[1:n]。类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,…,ar-1,ar。若1≤l≤s≤t≤r≤n,则称a[s:t]是a[l:r]的子序列。现在有q个询问,每个询问给定两个数l和r,1≤l≤r≤n,求a[l:r]的不同子序列的最小值之和。例如,给定序列5,2,4,1,3,询问给定的两个数为1和3,那么a[1
CreationAugust
·
2016-04-21 08:00
线段树
单调栈
查分询问
离线乱搞
[bzoj4542][
HNOI2016
]大数
题目大意给定字符串每次询问该字符串的一个子串中有多少子串转为数字后是p的倍数。p #include #include #include #definefo(i,a,b)for(i=a;i=b;i--) usingnamespacestd; typedeflonglongll; typedefdoubledb; constintmaxn=100000+10; intbelong[maxn],s[ma
WerKeyTom_FTD
·
2016-04-20 20:00
bzoj4540: [
Hnoi2016
]序列
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4540思路:又是莫队....我们发现左右端点移动时,只会增加或删除某个点开头或结尾的区间先考虑右端点从r移动到r+1令p为[l,r]中最小值的位置那么它会对新加的区间中的p-l+1个区间产生a[p]的贡献另一些左端点在[p+1,r],右端点是r+1的区间怎么统计呢?首先用单调栈求出l[i],r
thy_asdf
·
2016-04-20 20:00
【bzoj4542】[
Hnoi2016
]大数 莫队
Description小B有一个很大的数S,长度达到了N位;这个数可以看成是一个串,它可能有前导0,例如00009312345。小B还有一个素数P。现在,小B提出了M个询问,每个询问求S的一个子串中有多少子串是P的倍数(0也是P的倍数)。例如S为0077时,其子串007有6个子串:0,0,7,00,07,007;显然0077的子串007有6个子串都是素数7的倍数。Input第一行一个整数:P。第二
LOI_DQS
·
2016-04-20 19:00
bzoj4538: [
Hnoi2016
]网络
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4538思路:首先二分答案K那么对于每个询问我们只要判断权值大于K的路径的交是否都过x即可路径的交还是路径,路径交满足结合律可以离线拿个线段树维护一下即可,以权值为关键字,每个点记录该段区间的路径交也可以用splay来做二分时在线段树上二分即可。如果lca用倍增求,复杂度是O(nlog^2n)链
thy_asdf
·
2016-04-20 19:00
【
HNOI2016
模拟4.13】a
Description给出一棵n个节点的树,每个节点ai的范围在1~m,和q次询问,每次询问x到y的路径中小于/等于/大于k的数的个数。强制在线。n,q #include #include #definefo(i,a,b)for(inti=a;i=b;i--) #definerep(i,a)for(inti=last[a];i;i=next[i]) #defineN270000 usingname
alan_cty
·
2016-04-20 19:00
线段树
LCA
树链剖分
a
HNOI2016模拟
bzoj4537: [
Hnoi2016
]最小公倍数
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4537思路:把边按a排序,每sqrt(m)分一组然后把询问按b排序,把在这组及以前的边按b排序把这些边用并查集一条一条插入并维护零散的部分暴力插入并记录,做完后暴力撤销注意:并查集不能路径压缩,否则无法撤销回去#include #include #include #include #inclu
thy_asdf
·
2016-04-20 19:00
【
HNOI2016
模拟4.10】 K小数查询
Description维护一个长度为n的序列,使得其支持m次操作,包括区间插入和区间求k小数。n,m #include #include #definefo(i,a,b)for(inti=a;i=k)return1;elsereturn0; } fo(i,le,r[u])if(a[i].v+lazy[u]=k)return1;elsereturn0; } intmain(){ scanf("%d"
alan_cty
·
2016-04-20 19:00
二分
暴力
分块
HNOI2016模拟
K小数查询
【BZOJ4539】【
Hnoi2016
】树 树套树
你萌知道一道题从晚八点调到早一点是什么感觉么?你萌知道凌晨一点的CQ长什么样子么?你萌知道TLE或者WA的情况显示成RE对没有数据的小朋友伤害有多大吗???我!知!道!算了我们来说说Hn的这套题。。。6道DS。。。这道是我当时拿道题后第一道yy出标算的题。。。我也不知道是算树套树还是算分块。。。主要思想就是把模板树建好之后,每个加入一块树的操作在大树中只加入一个代表节点,代表节点的父亲设置为实际父
qq_34637390
·
2016-04-20 19:00
dfs序
树套树
可持久
上一页
1
2
3
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他