主席树
moomhxy
你若是天才,我便是疯子
展开
-
HDU - 4417 Super Mario 主席树
题目链接:https://vjudge.net/problem/HDU-4417#author=0题意:多次询问区间小于等于k的数目。思路:考虑用主席树,离散化要记得将k的值也添入,其余就是主席树常规操作了。#include<bits/stdc++.h>using namespace std;typedef long long ll;#define fi first#define se second#define ls rt << 1#define rs rt原创 2020-06-29 20:59:56 · 218 阅读 · 0 评论 -
洛谷P1972 [SDOI2009]HH的项链 离线+树状数组 主席树
题目链接:https://www.luogu.com.cn/problem/P1972题意:区间不同数的个数。思路:第一种写法:离线询问,将其按照r大小排序,然后对于ai,将当前位置+1,上一次出现位置-1,求前缀和就是答案。#include<bits/stdc++.h>using namespace std;typedef long long ll;#define fi first#define se second#define ls rt << 1#def原创 2020-06-29 16:43:33 · 301 阅读 · 0 评论 -
主席树模板
日后会逐渐完善模板静态区间第k小const int maxn = 1e5 + 10;int sum[maxn << 5], root[maxn], ls[maxn << 5], rs[maxn << 5];int a[maxn], b[maxn];int n, m, tot, len;int getid(int val){ retu...原创 2019-08-06 18:46:06 · 149 阅读 · 0 评论 -
HDU 2665-Kth number【主席树】
题意:裸题,让你求静态区间第K大。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e5 + 10;int sum[maxn << 5], root[maxn], ls[maxn << 5], rs[maxn << 5];...原创 2019-08-06 18:48:03 · 174 阅读 · 0 评论 -
HDU 6621-K-th Closest Distance【主席树+二分答案】
题意:给你n个数组成的序列,m次询问,每次让你找到一个区间[l, r]里与点 p距离第k近的点,输出这个第k距离。思路:我们用主席树来统计区间里每个数的出现次数,然后二分答案,检查[p - mid, p + mid] 这个区间中是否大于等于k个数,有的话就证明当前答案可行,一直二分就行了,思路还是很巧妙的。#include <cstdio>#include <cstr...原创 2019-08-06 18:49:18 · 224 阅读 · 0 评论 -
HDU 6601-Keen On Everything But Triangle【主席树】
题意:给你n个数,每次问你一段区间里能组成的最大三角形的周长,如果没有就输出-1.思路:我们考虑用主席树来维护区间第k大,其实判断三角形能否组成可以根据斐波那契来推断最多有不超过50项(1e9之内),所以我们维护区间前50大就可以。#include <bits/stdc++.h>using namespace std;typedef long long ll;const...原创 2019-08-06 21:23:21 · 191 阅读 · 0 评论 -
牛客网 Cutting Bamboos 【主席树+二分】
题意:给你n棵树,每棵树的高度是Hi,q次询问相互独立,每次询问{ l, r, x, y }, 就是在区间[l, r] 里的树需要y次全部砍完,每次砍可以选择一个高度,高于的地方全部砍掉,且要求每次砍掉的树的高度和都相同,问你在第x次砍时高度为多少。思路:首先可以确定每次砍的高度和是sum/y, 那么x次就是x * sum / y, 然后我们二分答案,记录tmp =x * sum / y, ...原创 2019-08-30 23:08:56 · 192 阅读 · 0 评论 -
2019 南京网络赛 F. Greedy Sequence【主席树】
题目链接:https://nanti.jisuanke.com/t/41303题意:给你一个1~n的全排列,然后让你处理一个二维矩阵。矩阵第i行的首元素是i,然后对于每列j,元素必须小于第j-1列的元素。你需要在原序列与i间隔不超过k的数中找到一个最大的(满足条件要小于前一列元素),直到选不了剩下的都是0.然后问你每一行非0元素的个数,即选了多少数。思路:可以知道我们需要做的就是在...原创 2019-09-01 20:01:06 · 192 阅读 · 0 评论