![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 77
pizzaaaaa
这个作者很懒,什么都没留下…
展开
-
HDU 3397 Sequence operation
一道很好的线段树的题目,其实是我在给大家拉题目的时候拉错的。。。简直逗的不行。。。这道题目对序列大概有下面几个操作:set 操作,就是把区间里的所有数变成0或1转置操作:把一个区间里的数从0变成1,从1变成0查询1操作:返回一个区间里1的个数查询2操作:返回一个区间中最长的1的长度如果割裂来看的话每个操作都很容易实现,set操作和转置操作可以用lazy操作实现(你如果不用l原创 2014-02-26 21:24:02 · 468 阅读 · 0 评论 -
HDU 3255 Farming
/* 可以直接转化为HDU 3642 Get The Treasury来做 也就是把每一块土地的价值看成高进行处理 HDU 请使用__int64 */#include #include #include #include #include using namespace std;#define LL long longconst int maxn = 62222;in原创 2014-07-21 16:03:19 · 458 阅读 · 0 评论 -
HDU 3265 Posters
/* HDU 提交请用__int64 简单的矩形面积并,考虑把每一个中间有孔的矩形分解为四个小矩形求解即可 */#include "cstdio"#include "algorithm"using namespace std;#define LL long long#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int原创 2014-07-21 16:06:53 · 398 阅读 · 0 评论 -
POJ 1177 Picture
/* 矩形的周长并 解决思路和矩形的面积并类似,采用扫描线解决,每一次周长的增量也就是扫描线线段长的变化量 由于一些边界情况比较难处理,考虑x方向和y方向上恰好有两个矩形相接的情形,为了简化处理,可以从x方向上扫一遍,再从y方向上扫一遍 */#include #include #include #include using namespace std;const int ma原创 2014-07-21 16:08:55 · 332 阅读 · 0 评论 -
446 C. DZY Loves Fibonacci Numbers
/* 感叹自己的代码能力实在是很差. 非常不错的题目 给定一列数,定义操作: 从一段数从头开始逐次加上f1,f2,f3,...,f(r-l+1). 利用线段树解决. 首先将连续的Fibonacci数通项公式转化为离散化的,利用二次剩余以及乘法逆元. 那么,对于一个区间的加和操作可以理解为对一个区间几何级数系数的维护. 这个可以利用线段树轻松解决. */#include #inc原创 2014-07-26 00:05:46 · 613 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers
#include "cstdio"#include "cstring"#include "iostream"#define LL long longusing namespace std;const int MAXN = 100005;LL A[MAXN];struct node{ int left; int right; LL sum;//维护区间和原创 2014-05-26 17:31:43 · 338 阅读 · 0 评论 -
444 C DZY Loves Colors
/* 线段树,注意传递参数的写法 */#include #include using namespace std;#define LL long longconst int maxn = 1e5 + 10;LL lazy[maxn<<2];LL delta[maxn<<2];//代表一个根节点的历史改变量之和,解决一个区间被多次覆盖的问题LL sum[maxn<<2];/原创 2014-08-04 00:58:31 · 532 阅读 · 0 评论 -
HDU 2665 Kth number(归并树写法)
#include#include#define maxn 100001int n,m,num[maxn],tr[18][maxn],s[maxn],e[maxn],h[maxn],top;void merge(int height,int a,int b){ if (a==b){ tr[height][a]=num[a]; return; }原创 2014-05-26 17:34:07 · 333 阅读 · 0 评论 -
482 B. Interesting Array
构造,ST表.#include #include const int MAXN = 100005;const int MAX_LOG = 17;struct query{ int l, r, v;};int n, m;query q[MAXN];int a[30][MAXN];int pre_log[MAXN];int st[MAXN][MAX_LOG];原创 2014-11-02 22:24:10 · 374 阅读 · 0 评论 -
网络教室 树上不同直径的数目
先预处理出一条树的直径,注意直径上中点的处理原创 2014-11-03 22:29:33 · 489 阅读 · 0 评论 -
Uva 1232 SKYLINE
#include #include #include using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxn = 1e5 + 10;int h[maxn<<2];//the height of the intervalint lazy[maxn<<2];//the m原创 2014-06-04 21:23:44 · 396 阅读 · 0 评论 -
POJ 2482 Stars in Your Window
//矩形面积并//注意数据范围,虽然坐标x,y在int范围内,但是当x+W,y+H时,可能会超出int//当不考虑点在边界上时,矩形为(x,y)~(x+W,y+H)#include #include #include using namespace std;#define LL long longconst int maxn = 22222;struct edge{原创 2014-07-21 16:13:54 · 350 阅读 · 0 评论 -
HDU 4007 Dave
/* 变形的矩形面积并问题 考虑每一个点,以其为左下角,给定正方形边长为正方形作正方形,那么我们最终所求就应该是整个矩形区域覆盖次数最多的地方 扫描线解决 */#include #include #include using namespace std;const int maxn = 2222;struct edge{ int a,b,h; int s;原创 2014-07-21 16:11:49 · 445 阅读 · 0 评论 -
POJ 3225 Help with Intervals
一道很好的线段树的题目。题目中给了若干种区间操作,问你通过这些操作后,最终得到的区间。首先,我们来解决如何将每个区间操作数学化的问题:(假设要更新的区间为[l,r],先不考虑开闭区间的问题)1)合并操作,很显然,这可以通过成段更新值为1达到。2)求交操作,这个需要稍微想一下,只需要将(-无穷,l)与(r,+无穷)赋为0。3)作差操作1,把[l,r]区间赋为0。4)作差操作2原创 2014-03-04 20:15:09 · 439 阅读 · 0 评论 -
Uva 11525 Permutation
#include #include const int maxn = 5e4 + 10;int Tree[maxn],size;inline int lowbit(int x){ return (x&-x);}void add(int x,int value){ for(int i=x;i<=size;i+=lowbit(i)) Tree[i]+=va原创 2014-06-04 21:25:59 · 394 阅读 · 0 评论 -
HDU 1255 覆盖的面积
#include "cstdio"#include "algorithm"using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxn=2222;struct edge{ double a,b,h; int s;};edge e[maxn];bool cmp(e原创 2014-07-16 14:54:38 · 361 阅读 · 0 评论 -
HDU 1542 Atlantis
#include "cstdio"#include "algorithm"using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxn=2222;struct edge{ double a,b,h; int s;};edge e[maxn];bool cmp(e原创 2014-07-16 14:50:26 · 306 阅读 · 0 评论 -
HDU 3308 LCIS
#include "cstdio"#include "algorithm"using namespace std;#define maxn 111111#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int a[maxn];int lmax[maxn<<2],rmax[maxn<<2],mmax[maxn<<2];void push原创 2014-05-26 17:28:51 · 330 阅读 · 0 评论 -
HDU 4217 Data Structure?
#include "cstdio"#include "iostream"#include "algorithm"using namespace std;const int maxn = 262155;int Tree[maxn+10];inline int lowbit(int x){ return (x&-x);}void add(int x,int value){原创 2014-05-26 17:30:31 · 397 阅读 · 0 评论 -
POJ 3277 City Horizon
/* 可以直接转化为矩形面积并进行解决 */#include "cstdio"#include "algorithm"using namespace std;#define LL long long#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxn=88888;struct edge{ LL a原创 2014-07-21 15:41:03 · 322 阅读 · 0 评论 -
HDU 3511 Prison Break
/* 直接复制粘贴的别人的代码 需要形象化地理解点的加入和删除,扫描线的扫描过程 */#include#include#include#include#include#include#includeusing namespace std;const int maxn = 51111;const double eps = 1e-8;inline int dcmp(doub原创 2014-07-21 15:43:31 · 410 阅读 · 0 评论 -
HDU 3642 Get The Treasury
//g++ AC 在两个int型变量进行乘法时,为了防止溢出,请使用(LL)强制类型转换//HDU 请使用__int64/* 注意到z这一维的坐标范围较小,可以考虑直接离散化z的坐标之后进行枚举,对x,y平面内进行普通的线段树矩形求交即可. 另外,在计算覆盖三次的面积的时候,sum1代表只覆盖一次的线段长度,sum2代表只覆盖两次的线段长度,sum3代表只覆盖了三次以及以上的线段长度.原创 2014-07-21 15:57:17 · 347 阅读 · 0 评论 -
Codeforces Round #263 (Div. 1)
56.Codeforces 461 A. Appleman and Toastman:简单的贪心.57.Codeforces 461 B. Appleman and Tree题意:给定一棵包含n个节点的树,这棵树的一些节点(至少一个)被染成黑色,现在可以删除一些边,使得删完边后的每个联通分量中恰好只有一个黑色节点.问满足条件的方案数一共有多少(对1e9+7取mod).解法:树形原创 2014-11-05 11:05:02 · 519 阅读 · 0 评论