CDQ分治
gjghfd
这个作者很懒,什么都没留下…
展开
-
bzoj3963 [ WF2011 ] --cdq分治
思路与1492相同。注意点:1、叉乘时用long long会爆,要用double2、凸包中可能什么都没有,这时不能更新。 代码: 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define N 100010 7 #define ll long long 8 #define E原创 2017-05-26 16:42:14 · 365 阅读 · 0 评论 -
bzoj1492 [ NOI2007 ] --斜率优化DP+cdq分治
显然在某一天要么花完所有钱,要么不花钱。所以首先想到O(n^2)DP:f[i]=max{f[i-1],(f[j]*r[j]*a[i]+f[j]*b[i])/(a[j]*r[j]+b[j])},j其中f[j]*r[j]/(a[j]*r[j]+b[j])是第j天最多能买多少A券,B类似。假如我们已经找到了最优的j,那么有f[i]=(f[j]*r[j]*a[i]+f[j]*b[i])/(a[j]原创 2017-05-26 16:42:10 · 302 阅读 · 0 评论 -
bzoj2716 [ Violet 3 ] --cdq分治+树状数组
树状数组打错调了一个小时。。。对于点(x,y),其它点只会在他的左下、右下、左上、右上四个方向上。我们只需求在左下方向上就可以了,因为其他方向可以通过改变相对位置求得。考虑cdq分治。先按x坐标排序,然后将区间[l,r]分为[l,mid],[mid+1,r],因为只求左下方向上的点,所以可以去掉绝对值:dis=x+y-(x'+y')只需求x'+y'最大的点就可以了。求(X,Y)时将[l,mi原创 2017-05-26 16:42:40 · 425 阅读 · 0 评论 -
Codeforces848C Goodbye Souvenir -- CDQ分治
令 previprev_i 表示 aia_i 上一个出现的位置。发现答案可以表示成 ∑i=lr [l≤previ]×i\sum_{i=l}^r ~[l\le prev_i]\times i 由于 previ≤iprev_i\le i ,还可以表示为 ∑i=1r [l≤previ]×i\sum_{i=1}^r ~[l\le prev_i]\times i 然后直接CDQ分治就可以了。代码#in原创 2017-09-02 21:40:20 · 1231 阅读 · 0 评论 -
bzoj3672 [ NOI2014 ] -- 树上CDQ分治 + 斜率优化DP
神题题解代码#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;#define N 200010#define Eps 1e-15#define ll long longinline char nc(){ static char buf[100000原创 2017-09-21 20:32:41 · 303 阅读 · 0 评论 -
[ CDQ分治 ] BZOJ4237
先将坐标按 xx 排序,然后考虑左端点在 [l,mid][l,mid],右端点在 [mid+1,r][mid+1,r] 的矩形个数。 将两个区间分别按 yy 降序排序,对于左区间维护一个 xx 递减的单调栈,对于右区间维护一个 xx 递增的单调栈。 枚举左区间的点 ii,将右区间 yy 坐标大于当前点 yy 坐标的点加入。以 ii 点为左端点的矩形个数就是右区间单调栈中 yy 在 yiy_i 到原创 2017-11-23 20:19:39 · 1060 阅读 · 0 评论 -
[ CDQ分治 并查集 ][ AHOI2013 ] BZOJ3237
分治到区间 [l,r][l,r] 时,将 [mid+1,r][mid+1,r] 中不在 [l,mid][l,mid] 出现的边加入,然后分治左区间,右区间类似。这样就能保证分治到一个区间时所有不在区间中的边都加入了。并查集维护图的连通就好了。#include<bits/stdc++.h>using namespace std;inline char nc(){ static char b原创 2017-12-04 18:24:46 · 220 阅读 · 0 评论 -
[ DP CDQ分治 ] BZOJ4553
设 li" role="presentation" style="position: relative;">lilil_i 表示 ai" role="presentation" style="position: relative;">aiaia_i 可以变成的最小值, ri" role="presentation" style="position: relative;">ririr_i 表示最大值原创 2018-01-27 11:30:41 · 289 阅读 · 0 评论