数据结构
文章平均质量分 81
丿Smile灬晨星
这个作者很懒,什么都没留下…
展开
-
LeetCode Word Ladder II(双向广搜)
Word Ladder II,双向广搜原创 2016-01-13 15:54:51 · 673 阅读 · 0 评论 -
hdu4419 线段树扫描线
思路很简单,主要是向上更新比较麻烦。ACcode:#include#include#include#includeusing namespace std;typedef __int64 LL;const int nsize=111111;struct Line{ int lx,rx,y,f; Line() {} Line(int a,in原创 2012-11-23 11:49:41 · 430 阅读 · 0 评论 -
spoj 1557GSS2 线段树之综合
话说做过区间最大连续和,也做过区间去重求和,两个功能综合之后就郁闷了。一开始很单纯的想前后扫一遍,不过马上意识到思维差了太多了。看了网上的题解之后,豁然开朗,主要是利用累加记录最大值的思想。废话不多说了,思路到处有就不再赘述了。ACcode:#include#include#include#includeusing std::sort;using std::unique;原创 2012-11-22 15:41:27 · 658 阅读 · 0 评论 -
hdu4267 线段树单点更新
一开始维护10*10的空间无情的被爆了,然后只开55的空间,还是爆了,没办法只能继续优化代码,加了一个build总算把空间剪下来了。正解还是得用树状数组啊,有时间再去了解,先贴个代码水过。。。ACcode:#include#include#includeconst int nsize=50001;int arr[nsize],ys[11][11];int sum[ns原创 2012-11-21 12:10:24 · 498 阅读 · 0 评论 -
UESTC 1558 线段树点更新
每次查找当前位置开始权值到结束权值之间最小时间,更新结束点的最小时间。不过在建树的时候初始化写在if里面了,因此wrong了n次还蛋疼了一晚上。ACcode:#include#include#includeusing std::unique;using std::sort;typedef long long LL;const int nsize=111111;c原创 2012-11-20 17:28:39 · 514 阅读 · 0 评论 -
ural1707 线段树扫描线
这题卡了四五天了,从开始看题目就蛋疼了,看了不知道多少遍,再与队友分析了一下,总算明白了题意。题意及思路:首先给出m组s0,t0,ds,dt,k; 由公式算出m*k个点; 然后给出p组a0,b0,c0,d0,da,db,dc,dd,q; 由公式算出q个矩形; 对于每个矩形是否有点在其内。原创 2012-11-20 16:59:48 · 650 阅读 · 0 评论 -
hdu1541/poj2352 线段树之单点更新
很简单的线段树,询问区间和,贴个代码ACcode:#include#include#include#includeusing std::sort;const int nsize=155555;int x[nsize],y[nsize];int X[nsize];int num[nsize];int tre[nsize<<2];void update(i原创 2012-11-15 20:47:51 · 514 阅读 · 0 评论 -
uva11983 线段树之k次面积交
之前做过一个类似的,加个循环就好了ACcode:#include#include#include#define LL long longusing std::sort;const int nsize=33333;struct Line{ int lx,rx,y,f; Line(){} Line(int a,int b,int c,i原创 2012-11-14 17:52:19 · 1038 阅读 · 0 评论 -
hdu4358 线段树之离线累加处理
思路: 1.用前向星建图,然后先把树处理成区间; 2.对询问按右边界排序,将权重离散化; 3.离线处理,sum[k]记录k~i之间的k次权值数; 4.每次将k次的段+1,k+1次的段-1. ACcode:#include#include#include#includeusing std::vector;using std原创 2012-11-28 18:33:01 · 576 阅读 · 0 评论 -
hdu4288 线段树之点更新
建5颗树分别存和,每个节点记录区间点数。ACcode:#include#include#include#includeusing std::sort;typedef long long LL;const int nsize=111111;char op[nsize];LL sum[nsize<<2][5];int X[nsize],num[nsize<<2],原创 2012-11-28 18:32:00 · 447 阅读 · 0 评论 -
hdu3340 线段树之多边形分解
思路很重要啊,一开始看了之后,完全不知道要维护什么,看了网上的思路,咋就没想到呢。。。将多边形分解成梯形,每次维护当前区间面积,向下传递的梯形上下底(相似三角形)。ACcode:#include#include#include#include#define eps 1e-4using std::sort;using std::swap;const int nsi原创 2012-11-13 20:10:16 · 720 阅读 · 0 评论 -
hdu1823 二维线段树~最大值
很基础的二维线段树,为了有点挑战性,加了离散化同时将更新合并了。。。ACcode:#include#include#include#includeusing std::sort;using std::swap;const int nsize=111111;const int msize=222;struct Node{ int h,a,v,op;原创 2012-11-10 17:22:23 · 581 阅读 · 0 评论 -
STL vector基本用法
1.sort(vi.begin() , vi.end()); // 从小到大2.reverse(vi.begin(),vi.end()) // 从大到小3.vector::iterator it;4.it=find(v.begin(),v.end(),value);5.v.push_back(value); void pop_back();6.v.empty原创 2012-11-11 04:43:44 · 628 阅读 · 0 评论 -
poj2464 线段树扫描线
由于这几天刚好有事,这题目拖了好几天,今天总算静下心来搞定了。题目并不难,只是有点繁琐,而且要注意细节。简要思路:先把数据离散化,同时记录每一个X左右边有多少,X有多少,Y同理;然后按先X再Y从小到大排序,再来扫描,用线段树记录区间里点的个数。然后推出四个象限的点的个数,麻烦的事来了,坐标上的点怎么去掉,开了cntx,cnty记录每个X,Y坐标询问次数,然后就很简单了。最后原创 2012-11-11 14:26:11 · 819 阅读 · 0 评论 -
poj2482 线段树扫描线
一开始没什么想法,看了点提示,居然是把每个点换成矩形。代码立即敲出来了,不过由于二分查找的时候形参没用LL,结果就悲剧了一天。幸好把代码打出来找到错误了,做完又去看了个离线算法。。。ACcode:在线:#include#include#include#include#define LL long longusing namespace std;const原创 2012-11-07 22:16:40 · 596 阅读 · 0 评论 -
hdu 4417 线段树离线处理
跟hdu3333差不多,排序离线处理。Accode:#include#include#includeusing std::sort;using std::unique;const int nsize=111111;struct Point{ int h,id; bool operator < (const Point &cmp原创 2012-11-23 11:52:07 · 620 阅读 · 0 评论 -
CF286D 扫描线+STL
看到题目很容易想到用线段树写,不过为了挑战一下自己的思维,看了别人的代码,纠结的将思路理清楚了,磨蹭了一天才搞定。首先将线段离散化,求出每个预处理的线段的刚好通过和刚好通不过的时间边界,最后按时间顺序扫描。ps:用结构体内部排序比外部排序开了将近3倍。ACcode:#include#include#include#includeusing nam原创 2013-04-07 19:20:48 · 975 阅读 · 0 评论 -
树的重心
看了几天树的重心的题目,也做了几个题,总结一下。首先,定义一下重心,网上还有一种定义,效果一样,纯属个人理解。节点重心的定义是:以这个点为根,那么所有的子树(不算整个树自身)的节点权值大小都不超过整个树大小的一半。边权重心的定义是:以这个点为根,那么所有的子树(不算整个树自身)的边权值大小都不超过整个树大小的一半。树的重心主要解决树中点对之间路径最短的问题。原创 2013-04-13 21:02:28 · 1873 阅读 · 0 评论 -
Leetcode Best Time to Buy and Sell Stock IV(最大子段和)
贪心、最大子段和原创 2016-01-12 17:13:26 · 499 阅读 · 0 评论 -
原地归并实现
/**原地归并*/void swap(int* vals, int x, int y){ vals[x] ^= vals[y]; vals[y] ^= vals[x]; vals[x] ^= vals[y];}void reverse(int* vals, int x, int y){ while(x < y) { swap(原创 2015-12-06 00:09:39 · 633 阅读 · 0 评论 -
hdu3966(树连剖分模板-节点价值建树)
裸的树连剖分,做成模板写的ACcode:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;原创 2015-09-29 23:13:36 · 369 阅读 · 0 评论 -
hdu5497(树状数组模板)
用两个树状数组维护前缀后缀的值即可,必须离散化,否则TLE参考代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#includeusi原创 2015-10-03 21:39:24 · 754 阅读 · 0 评论 -
hihoCoder 1236
思路:sqrt(n)分块+bitset优化第一次写分块,以此纪念参考代码:#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long LL;cons原创 2015-09-29 00:06:11 · 484 阅读 · 0 评论 -
线段树模板(poj3468)
#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long LL;const LL LINF = (1LL <<63);const in原创 2015-09-24 22:30:34 · 343 阅读 · 0 评论 -
hdu4426 manacher算法+Hash
参考了网上的思路,第一次写hash, 写得很纠结 ,结果因为统计的时候超int了,调到想死。。。ACcode:#include#include#include#include#includeusing namespace std;typedef long long LL;const int PR=37;const int NS=111110;const in原创 2013-11-07 22:08:14 · 853 阅读 · 0 评论 -
hdu4424 并查集
思维题 代码很好写 并查集不好想啊啊啊啊啊啊啊啊啊ACcode:#include#include#include#include#include#include#include#includeusing namespace std;typedef long long LL;const int NS=210010;const double eps=1e原创 2013-11-06 20:30:45 · 577 阅读 · 0 评论 -
hdu4453 伸展树
第一道伸展树题目 7K的代码连写带调耗了将近一天时间 各种细节错误 AC的时候有种解脱的感觉 终于不用睡不着觉了 数据结构的题目就是坑ACcode:#include#include#include#include#include#include#include#includeusing namespace std;typedef long long LL原创 2013-10-29 02:08:43 · 771 阅读 · 0 评论 -
hdu4670 树的分治
以重心将树分成森林,时间复杂度最坏为O(nlogn)。ACcode:#include#include#include#includeusing namespace std;typedef long long LL;#define pb push_backconst int NS=500010;int n,k,top;LL pri[50],val[NS],sta原创 2013-08-15 01:43:19 · 824 阅读 · 0 评论 -
hdu 4578 区间线段树
很裸的线段树,由于一个乘号写成加号调了一下午,总算搞定了。ACcode:#include#includetypedef long long LL;const int NS=100010;const int MOD=10007;#define lc (rt<<1)#define rc (rt<<1|1)#define now seg[rt]struct node{原创 2013-08-10 18:45:57 · 832 阅读 · 0 评论 -
poj2104 划分树
划分树模板题,第一次写,昨天晚上琢磨了一晚上把思路理清楚,早上起来Wrong了之后,检查出一个下标错误,险险的A掉了。ACcode:#include#include#includeusing namespace std;typedef long long LL;const int NS=100010;struct node{ int num[NS];原创 2013-07-30 10:24:34 · 794 阅读 · 0 评论 -
hdu4605 线段树+dfs
dfs树节点,同时用线段树记录左右节点路径。ACcode:#include#include#include#include#include#include#includeusing namespace std;#pragma comment(linker,"/STACK:102400000,102400000")#define lc rt<<1#define r原创 2013-08-01 11:57:35 · 839 阅读 · 0 评论 -
hdu3473 划分树
直接套用划分树模板即可。ACcode:#include#include#includeusing namespace std;typedef long long LL;const int NS=100010;struct node{ LL sum[NS]; int num[NS]; int val[NS];}row[18];int n原创 2013-07-31 20:35:09 · 647 阅读 · 0 评论 -
hdu4630 线段树||树状数组离线处理
比赛时候没想到,感觉弱爆了,做了两个月线段树白做了。。。。白做了。。。。ACcode:#include#include#include#includeusing namespace std;const int NS=50050;struct node{ int l,r,id; bool operator < (const node cmp) const原创 2013-07-30 22:12:50 · 1482 阅读 · 1 评论 -
hdu3016 线段树+简单DP
看题目都看了半天,各种小条件,看了网上的思路才算把题目理解清楚了,主要是先按高度排序,再用线段树从下到上记录每块木板左右两边能跳到的id。然后从上到下作DP。中途能量不能小于1.ACcode:#include#include#includeusing std::sort;const int nsize=111111;const int INF=100000000;i原创 2012-11-06 15:57:19 · 874 阅读 · 0 评论 -
hdu3255 线段树体积并
看到题目本以为是扫描区域最大值,分别记录三个值,最初的想法是这样,应该也可以做只是麻烦一点。后来队友说可以看成体积并来做,把价值看成高度,神一般的思想啊。这样一想就很简单了,敲了个代码水过。。。ACcode:#include#include#include#include#define LL __int64using std::sort;const int nsize原创 2012-11-07 01:59:14 · 561 阅读 · 0 评论 -
UESTC1425-LCIS 线段树区间合并
做过一个类似的,没注意细节,wrong了一次。。。ACcode:#include#includeusing namespace std;const int size=100000;struct Node{ int li,ri,mi; int nl,nr; int lazy; int sum;}tre[siz原创 2012-10-19 20:57:09 · 546 阅读 · 0 评论 -
poj3225 线段树~取反操作
一开始想用离散化,想了我好几天,发现没有办法了,昨晚突然想到,这里既考虑区间有考虑点,如果离散化需要各种繁琐的操作,想想还是算啦,然后就自己敲普通的线段树,果断超时啊,也不知道哪里有问题,看了sha崽大神的代码,那是相当的棒,只能膜拜!!!仿照大神的思路敲了一个,调试一下就过了,感觉线段树要学的太多了,这样一个题目居然卡了几天,只能说太水了。ACcode:#include#i原创 2012-10-20 01:31:20 · 723 阅读 · 0 评论 -
poj1436 线段树+暴力
纠结了许久,题目都看了半天,还是看了别人的题意才似懂非懂,最后看了别人的代码才AC了。ACcode:#include#include#include#includeusing namespace std;const int size=16000;vector vis[(size>>1)+10]; int tre[size<<2];int mark[(size>>原创 2012-10-19 20:51:35 · 472 阅读 · 0 评论 -
hdu3954 线段树延迟更新
延迟最小升级经验值/每级经验最大值,只能说思想屌爆啦!历时一整天总算搞定了,大错误没有,小错误一大堆,心都碎了,只能说线段树太让人蛋疼了。两百行的代码,检查起来相当蛋疼,尤其是测试数据,各种小错误都可以过,坑爹啊。两种AC代码如下:延迟最小升级经验值:#include#includeconst int size=11111;const int INF=((1<<原创 2012-10-27 22:07:53 · 494 阅读 · 0 评论 -
poj 2299 求逆序数
水题,归并排序的思想。ACcode:#include#includeusing namespace std;const int size=500000; __int64 ans; int arr[size+10],brr[size+10];void merge(int left,int mid,int right){ int i=left,j=mi原创 2012-09-24 00:59:07 · 430 阅读 · 0 评论