随笔分类 - 算法--CDQ分治
摘要:题面 Description 给定N个数对(xi, yi),求最长上升子序列的长度。上升序列定义为{(xi, yi)}满足对i include include include include using namespace std; const int MAXN = 100005; inline i
阅读全文
摘要:传送门 解题思路 题目里有两句提示一定要看清楚,要不全买要不全卖,所以dp方程就比较好列,f[i]=max(f[j]*rate[j]*a[i])/(rate[j]*a[j]+b[j])+(f[j]*b[i])/(rate[j]*a[j]+b[j]),意义就是在从前面的某一天买入,这一天卖出,时间复杂
阅读全文
摘要:传送门 解题思路 四维偏序问题,模仿三维偏序,第一维排序,第二维CDQ,最后剩下二元组,发现没办法处理,就继续嵌套CDQ分治。首先把二元组的左右两边分别打上不同的标记,因为统计答案时只统计左边对右边的影响,然后再进行一个CDQ解决第三维,最后用树状数组解决最后一维。 #include<iostrea
阅读全文
摘要:传送门 解题思路 cdq分治,将位置看做一维,修改时间看做一维,权值看做一维,然后就转化成了三维偏序,用排序+cdq+树状数组。注意算删除贡献时要做两次cdq,分别算对前面和后面的贡献。 #include<iostream> #include<cstdio> #include<cstring> #i
阅读全文
摘要:传送门 解题思路 CDQ分治,和简单题的套路一样,一维排序,一维CDQ,一维树状数组,注意要把三者都相同的元素并到一起。数组不要开小了。。 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<a
阅读全文
摘要:题面 Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1<=x,y<=N,A是正整数 将格子x,y里的数字加上A 2 x1 y1 x2 y2 1<=x1<= x2<=N 1<=y1<= y2<=N
阅读全文
摘要:传送门 拿个二维偏序练练cdq板子,其实就和归并排序差不多,复杂度不太会,似乎nlogn?。 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; const int
阅读全文

浙公网安备 33010602011771号