首页 > TAG信息列表 > sgt
BZOJ4919 大根堆(树形dp+线段树合并)
用 multiset 启发式合并贪心维护 LIS 的做法就不多说了,网上题解一大堆,着重讲一下线段树合并维护 \(dp\)。 \(O(n^2)\) 的 \(dp\) 非常显然。离散化后,设 \(dp[u][i]\) 表示节点 \(u\) 的子树中,最大值为 \(i\) 时最多取多少个节点。转移时考虑是否将节点 \(u\) 加入大根堆并分类讨论SZOJ逆序对题解
逆序对 思路 设原序列为\(a_1,a_2,...,a_n\) 则每次操作后变为 \(a_2,a_3,...,a_n,a_1\) 那么\(\forall i>1\)且\(a_1>a_i\)(亦即\(a_1,a_i\) 在原序列中形成逆序对),这个逆序对贡献不存在,即逆序对对数减少这样的\(i\)的个数 且由于\(a_1\)变为第\(n\)个,所以\(\forall i \in [2,n]\),【hdu6547】Tree(树链剖分, 线段树区间根号)
problem algorihtm 1、树链剖分 什么是树链剖分(重链剖分)? 树链,就是树上的路径。剖分,就是把路径分类为重链和轻链。对于树上的一个点,与其相连的边中,连向的节点子树大小最大(重儿子) 的边叫做重边,其他的边叫轻边。重边连成的边叫做重链。下图中黑色加粗的为重链。 树链剖分(重链NOIP模拟31
T1: 将问题分层考虑,显然我们可以求出最大得分,利用 前趋贪心即可,于是考虑在最大得分下,如何使字典序最 大,显然我们可以考虑在换牌的情况下对最大得分有无影 响,发现其具有单调性,于是在使用线段树维护最大得分 进行check的同时二分满足条件的最大得分即可 1 #include <bits/stdcloj#3094. 「BJOI2019」删数
Description loj#3094 Solution 首先肯定是考虑在没有修改的情况下,直接给定序列该如何计算该序列需要修改几个数才能删空: 首先,该序列的顺序对答案是没有任何影响的,影响答案的只有某个数的出现次数,这令我们想到在值域数轴上用桶维护每个数的出现次数。 接下来考虑模拟删边的过程,一「CF803G Periodic RMQ Problem」
题目大意 给出一个长度为 \(n\) 的序列 \(b\),序列 \(a\) 又序列 \(b\) 复制 \(k\) 次后得到,需要支持区间覆盖,区间取 \(min\). 分析 开始没有想到可以用st表,很自闭. 但是毕竟写出来了,就来分享一个不用st表的做法,这个做法可能比较复杂,如果想要实现更方便的做法可以看看\(\colSPOJ D-query(主席树入门)
题意: 求l,r区间中不同数字的个数 思路: 主席树,第i颗树代表了插入a[i]后,1~i区间内的信息 #include<bits/stdc++.h> #define ll long long using namespace std; const int N = 3e4+10; struct node{ int l,r,sum; }sgt[N*40]; int a[N],root[N],now; map<int,int> mp;