[BZOJ4358]permu线段树+莫队】的更多相关文章

[BZOJ4358]Permu(回滚莫队) 题面 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问.每次询问某个区间[l,r]中,最长的值域连续段长度. 分析 最简单的方法显然是用线段树维护最长值域连续段长度,复杂度\(O(n\sqrt n \log n)\),会TLE 我们以值为下标维护两个数组lb[v],rb[v]表示<v(定义为"左侧")和>v(定义为"右侧)的连续段长度,当我们加入一个值v的时候,会产生一个长度为lb[v]+rb[v]+1的…
看到题目就可以想到hash 然后很自然的联想到可持久化权值线段树 WA:base取了偶数 这道题还可以用莫队做,比线段树快一些 可持久化线段树: #include<bits/stdc++.h> #define ll long long #define uint unsigned int #define ull unsigned long long #define inf 4294967295 #define N 100005 #define M 100005 #define base 1000…
正解:主席树/莫队 解题报告: 传送门! 这题好像就是个主席树板子题的样子,,,? 毕竟,主席树的最基本的功能就是,维护一段区间内某个数字的个数 但是毕竟是刚get到主席树,然后之前做的一直是第k大,这个是维护区间内数字个数,题目类型不一样,所以还是积累一下这个题型和对应的方法QAQ 顺便也水一发题解 所以还是写下这题 首先不难想到对于[l,r]的点直接把r的树和l-1的树做差就可以得到 这样现在就相当于是得到了一棵线段树 那肯定就是维护这个区间的所有数字的出现次数(,,,我发现我这里出现了两个…
[题目]D. Huffman Coding on Segment [题意]给定n个数字,m次询问区间[l,r]的数字的哈夫曼编码总长.1<=n,m,ai<=10^5. [算法]哈夫曼树+莫队+分块 [哈夫曼树]哈夫曼树又称最优构造树,n个数字的哈夫曼树是含有n个给定权值叶子的点权路径和最小的二叉树. 点权路径和(WPL)可以表示为每个点的深度*权值. 构造方法:每次取点权最小的两个根节点作为左右子树(左小右大)组成新根节(点权为左右之和),多次操作直到只剩一棵树.(类似合并果子) 哈夫曼树的W…
分析 第一问随便搞,直接说第二问. 令原数列为\(seq\),\(pre_i\)为\(seq_i\)这个值上一个出现的位置,于是可以简化询问条件为: \(l \leq i \leq r\) \(a \leq seq_i \leq b\) \(pre_i < l\) 这是一个显然的三维数点问题.发现第三维\(pre_i\)只有最大值的限制,所以我们可以把所有询问按\(l\)升序排序,所有点按\(pre_i\)升序排序,用一个指针从左往右扫所有询问,然后不断向数据结构插入符合第三维要求的点,剩下的两…
正题 题目链接:https://www.luogu.com.cn/problem/P3180 题目大意 \(n\)个点\(m\)条边的一个仙人掌,有点权. \(Q\)次询问给出\(op,x,y\),封闭\(1\)到\(x\)号点的所有简单路径后\(x\)能到达的点的点权中,小于\(y\)且出现次数为奇数/偶数的权值数目. \(1\leq n,Q\leq 10^5,1\leq m\leq 1.5\times 10^5,0\leq y,w_i\leq 10^6\) 解题思路 梦魇融合怪是吧 先对仙人…
问题: permu 时间限制: 30 Sec  内存限制: 512 MB 题面 题目描述 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问.每次询问某个区间[l,r]中,最长的值域 连续段长度. 输入格式 第一行两个整数n,m. 接下来一行n个整数,描述P. 接下来m行,每行两个整数l,r,描述一组询问. 输出格式 对于每组询问,输出一行一个整数,描述答案. 样例输入 8 3 3 1 7 2 5 8 6 4 1 4 5 8 1 7 样例输出 3 3 4 题解 线段树+莫队. 考虑…
题面 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变得越来越长.有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同 的贝壳?这个问题很难回答...因为项链实在是太长了.于是,他只好求助睿智的你,来解 决这个问题. Input 第一行:一个整数N,表示项链的长度. 第二行:N个整数,表示依次表示项链中贝壳的编号(编号为0到1000000…
题意 给一个数列,一些询问,问$[l,r]$中第$K$大的元素是哪一个 题解: 写法很多,主席树是最常用的一种之一 除此之外有:划分树,莫队分块,平衡树等 主席树的定义其实挺模糊, 一般认为就是可持久化线段树/函数式线段树的这种实现方式 被用来求区间第$K$大的时候,是可持久化的权值线段树 主席树的特点就是 $[l,r]$的区间信息可以通过创造的第$r$颗树的减去第$l-1$颗树得到 具体思路就是: 将数列的值进行排序,去重 对于原序列的每一个值,依次插入可持久化的权值线段树,将它所在排序位置权…
http://codeforces.com/problemset/problem/375/D 树莫队就是把树用dfs序变成线性的数组. (原数组要根据dfs的顺序来变化) 然后和莫队一样的区间询问. 这题和普通莫队有点区别,他需要的不单单是统计区间元素种类个数,是区间元素种类个数 >= k[i]的个数. 考虑最简单的用bit维护,复杂度多了个log 观察到每次只需要 + 1  或者 -1 用一个数组sum[k]表示种类数大于等于k的ans 在numc[val]++之后,sum[numc[val]…