luogu P4396 [AHOI2013]作业】的更多相关文章

目录 题目 思路 错误&&傻叉 代码 题目 luogu 思路 每次都是插入比之前所有数字大的数,所以之前的答案就不会改变 用fhq-treap求出原序列,然后用树状数组依次算出每个值得lis(显然g[i]=g[i-j]+1) 然后答案就是前i个得最大值(答案一定是不降的) 这里具体讲一下fhq-treap 如果你还是维护val的话,显然不对 如果要在x的位置插入y 那么我们就要把前x个和后size[rt]-x个分开 这里的关键字就成了size了(显然) 然后你就按照size进行分裂 注意递…
原题传送门 最快的解法好像是cdq,但窝只会莫队+线段树/树状数组的做法 题目要我们求1.在区间[l,r]中值域在[a,b]中有多少个数2.在区间[l,r]中值域在[a,b]中有多少个不同数 一眼就看出莫队,再拿数据结构维护维护就行了,一看,3000ms,应该跑得过 用线段树交了一发,发现完美的被卡(因为线段树单点修改的复杂度是严格的\(O(\log n)\)) 改成树状数组就跑得飞快(树状数组跑不满\(O(\log n)\)) 最后时间复杂度是\(O(n \sqrt n \log n)\) #…
题目传送门:洛谷P4396. 题意简述: 给定一个长度为\(n\)的数列.有\(m\)次询问,每次询问区间\([l,r]\)中数值在\([a,b]\)之间的数的个数,和数值在\([a,b]\)之间的不同的数的个数. 题解: 第一问可以用主席树维护,但是第二问呢? 考虑离线处理询问,用莫队算法. 问题转化为加入一个数,删除一个数,统计数值在一个区间中的数的个数. 离散化后可以用树状数组维护,但是复杂度多个log,变成了\(O(n\sqrt{n}\log n)\). 考虑对数值也分块,先离散化,然后…
这个题正解是莫队+树状数组,但是我个人非常不喜欢树状数组这种东西,所以决定用分块来水这个题.直接在莫队维护信息的时候,维护单点同时维护块内信息就行了. 莫队就是这几行核心代码: void add(int x) { ++f[bl[x]];//维护块 ++cnt[x];//维护点 ) g[bl[x]]++; } void del(int x) { --f[bl[x]]; --cnt[x]; if(!cnt[x]) g[bl[x]]--; } void moqueue() { ,r = ; duke(…
题意 题目链接 Sol 为什么一堆分块呀..三维数点不应该是套路离线/可持久化+树套树么.. 亲测树状数组套权值线段树可过 复杂度\(O(nlog^2n)\),空间\(O(nlogn)\)(离线) #include<bits/stdc++.h> #define Pair pair<int, int> #define MP(x, y) make_pair(x, y) #define fi first #define se second #define Fin(x) {freopen(…
题目链接 luogu4396 思路 唯有水题暖人心 咕了4天,今天跟着std对拍才做出来不得不说题解真的水的一批 先离散化一下 第一问差分询问,权值树状数组套一套就好了 \(nlog_{n}\) 第二问,Emma 莫队,加上树状数组维护修改 \(nlog_{n}sqrt_{n}\) \(3s\)随便过吧,最慢的也才\(800ms\) 代码 #include <bits/stdc++.h> #define FOR(i,a,b) for(int i=a;i<=b;++i) using nam…
题目描述 题目传送门 分析 因为询问是关于区间的,并且没有强制在线,所以能用莫队解决 但是还要支持查询区间内大于等于 \(a\),小于等于 \(b\) 的数的个数和数值的个数 所以还要套一个数据结构 比较好想的做法是对权值开一个数状数组 \(logn\) 修改,\(logn\) 查询 复杂度有点高 考虑莫队的本质是进行了 \(n\sqrt{m}\) 次修改和 \(m\) 次查询 我们的修改必须是 \(O(1)\) 的,但是查询的次数比较少,可以 \(O(\sqrt{n})\) 解决 所以可以用值…
[AHOI2013]作业 (莫队+分块) 题面 给定了一个长度为n的数列和若干个询问,每个询问是关于数列的区间[l,r],首先你要统计该区间内大于等于a,小于等于b的数的个数,其次是所有大于等于a,小于等于b的,且在该区间中出现过的数值的个数. 分析 为简化时间复杂度分析,假设n,m在同一个数量级 不完美解法 首先第一问可以用可持久化线段树解决,第二问考虑莫队,莫队的时候用一个树状数组维护数值的出现情况,区间移动的时候,如果出现一个新的权值,就在树状数组上单点更新.反之则单点删除.关键部分代码如…
BZOJ3236: [AHOI2013]作业 题目描述 传送门 行,我知道是Please contact lydsy2012@163.com! 传送门2 题目分析 这题两问还是非常,emmmm. 首先第一问非常好解决,随便就可以用各种各样的方法求出来. 考虑第二问,明显可以让人想到莫队.通过在颜色上分块就可以快速解决问题. 离散化还是要离散化的,luogu数据比较毒. 是代码呢 #include <bits/stdc++.h> using namespace std; const int MA…
3236: [Ahoi2013]作业 Time Limit: 100 Sec  Memory Limit: 512 MBSubmit: 1393  Solved: 562[Submit][Status][Discuss] Description Input Output Sample Input 3 4 1 2 2 1 2 1 3 1 2 1 1 1 3 1 3 2 3 2 3 Sample Output 2 2 1 1 3 2 2 1 HINT N=100000,M=1000000 Sourc…