离散化
酷酷的Herio
这个作者很懒,什么都没留下…
展开
-
Cows on Ice(bfs+离散化)
Cows on Ice(bfs+离散化)思路因为每次移动是障碍点之间的移动,且数据范围较大,考虑离散化点后 bfs找到最短次数。因为查找距离每个点方向上最近的点,可以set实现。时间复杂度:O(nlogn)O(nlogn)O(nlogn)code// Problem: Cows on Ice// Contest: NowCoder// URL: https://ac.nowcoder.com/acm/contest/1577/C// Memory Limit: 65536 MB// Ti原创 2021-03-24 23:38:57 · 266 阅读 · 0 评论 -
P1972 [SDOI2009]HH的项链(离线&BIT)
P1972 [SDOI2009]HH的项链(离线&BIT)思路离线化+BIT,考虑将所有询问区间按rrr从小到大排序,对于某一个区间询问,若出现重复的数,我们只考虑最右边的那一个,因为重复种类只计算一次,这样排序后,正确性是对的,可以手膜几个例子。时间复杂度:O(nlogn)O(nlogn)O(nlogn) ,BITBITBIT的常数非常小,所以跑起来很快。code// Problem: P1972 [SDOI2009]HH的项链// Contest: Luogu// URL: h原创 2021-03-09 22:47:25 · 258 阅读 · 0 评论 -
LC.315. 计算右侧小于当前元素的个数
LC.315. 计算右侧小于当前元素的个数传送门思路:离散化权值树状数组。显然因为可能存在负数,所以先离散化一波,然后从右到左遍历,将询问值储存起来,然后更新即可。#define lowbit(x) x&(-x)class Solution {public: int tr[1000005],b[1000005]; void update(int x,int k){ while(x<=2e5){ tr[x]+=k; x+=lowbit(x); }原创 2020-07-11 13:45:49 · 335 阅读 · 0 评论 -
P1168 中位数
P1168 中位数传送门思路:1.对顶堆,大根堆(从大到小)存较小的数,小根堆(从小到大)存较大的数。如果当前数大于大根堆顶,就放入小根堆,否则放入大根堆。然后维护使两堆容量大小之差小于等于1,然后容量较大的那个堆顶元素即是答案。因为题目保证是求奇数个数的中位数,显然比中位数小的个数=比中位数大的个数,所以取多了那一个的堆顶即可。时间复杂度:O(nlogn)O(nlogn)O(nlogn)。#include<bits/stdc++.h>using namespace std;原创 2020-07-06 12:42:52 · 661 阅读 · 0 评论 -
P1637 三元上升子序列(DP+离散化权值树状数组)
P1637 三元上升子序列(DP+离散化权值树状数组)传送门思路:dp+dp+dp+离散化转权值树状数组。显然可以设dp[i][j]dp[i][j]dp[i][j]为长度为iii以a[j]a[j]a[j]结尾的子序列的个数。有转移方程:dp[i][j]=∑k<j,a[k]<a[j]dp[i−1][k]dp[i][j]=\sum\limits_{k<j,a[k]<a[j]} dp[i-1][k]dp[i][j]=k<j,a[k]<a[j]∑dp[i−1][k]显原创 2020-06-27 16:21:03 · 411 阅读 · 0 评论 -
牛牛种花(树状数组)
牛牛种花(树状数组)传送门思路:将坐标按xxx为第一关键字,yyy为第二关键字从小到大排序,从小到达遍历。然后用树状数组维护yyy的前缀和。离散化处理一下下标即可。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;#define mst(a) memset(a,0,sizeof a)#define lx原创 2020-06-22 21:44:14 · 362 阅读 · 0 评论 -
P1439 最长公共子序列 (LCS转LIS)
P1439 最长公共子序列 (LCS转LIS)传送门思路:离散化的好题。因为全排列的特性,可以将aaa数组进行一个离散化,双射。映射为1,2,3,4…n1,2,3,4\dots n1,2,3,4…n.然后题目就转化为求bbb数组中的LISLISLIS,然后用O(nlogn)O(nlogn)O(nlogn)求法就解决了。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+5;#原创 2020-06-08 16:32:57 · 345 阅读 · 0 评论 -
关于逆序对的题目练习
Minimum Inversion Number传送门题意:给定由0∼n−10\sim n-10∼n−1共nnn个数组成的排列,每次将第一个数放入序列尾后生成新的排列。求这nnn个排列的最小逆序数。思路:只需求出初始序列的逆序对数,其他用递推即可。因为0∼n−10\sim n-10∼n−1都包含了,所以对于元素xxx放入序列尾,ansafter=ansbefore+(n−1−x)−xans_{after}=ans_{before}+(n-1-x)-xansafter=ansbefore+(n−1原创 2020-06-07 09:10:02 · 619 阅读 · 0 评论 -
牛客小白月赛24 H.人人都是好朋友(离散化&并查集)
牛客小白月赛24 H.人人都是好朋友(离散化&并查集)题目传送门思路:将朋友的关系建立一个并查集。再遍历一遍,看两个敌人的根结点是否相同。AC代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e6+5;#define mst(a) memset(a,0,...原创 2020-04-19 20:22:13 · 335 阅读 · 0 评论