树状数组/线段树
u010660276
这个作者很懒,什么都没留下…
展开
-
树状数组
树状数组,看了半天,刚开始不太理解,看了下面这个图和讲解之后之后,才大体明白了。树状数组是一个查询和修改复杂度都为log(n)的数据结构,假设数组a[1..n],那么查询a[1]+...+a[n]的时间是log级别的,而且是一个在线的数据结构, 支持随时修改某个元素的值,复杂度也为log级别。 来观察这个图: 令这棵树的结点编号为C1,C2...Cn。令每个结点的值为这棵树的原创 2013-07-31 11:11:05 · 536 阅读 · 0 评论 -
树状数组--hdoj1166
敌兵布阵Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 30339 Accepted Submission(s): 12998Problem DescriptionC国的死对头A国这段时间正在进行军事演习,原创 2013-08-08 17:13:05 · 560 阅读 · 0 评论 -
线段树--poj3468
想尝试一下用线段树写,也是第一次,而不是有树状数组,可是自己没写出来,提交老是wa,也没找出错来,很是无语。下面是别人的代码:#include#include using namespace std; struct e{ int left,right; long long add; long long sum;}; e tree[400011];l原创 2013-08-09 16:25:59 · 555 阅读 · 0 评论 -
树状数组求逆序数poj2299
树状数组,具体的说是 离散化+树状数组。这也是学习树状数组的第一题.算法的大体流程就是:1.先对输入的数组离散化,使得各个元素比较接近,而不是离散的,2.接着,运用树状数组的标准操作来累计数组的逆序数。算法详细解释:1.解释为什么要有离散的这么一个过程?刚开始以为999.999.999这么一个数字,对于int存储类型来说是足够了。还有只有500000个数字,何必要离散化转载 2013-08-09 20:19:39 · 680 阅读 · 0 评论 -
线段树--hdoj1754
这几天做的线段树的几个题,老是wa,就是找不出错,看了人家的代码,基本没差别,我是直接按输入的数据一起维护的,我看很多是先建树,然后再根据输入数据更新,但应该是一样的。就好好理解一下!#includestruct node{ int left; int right; int date; int max;};node tree[800001];int max原创 2013-08-13 19:08:53 · 567 阅读 · 0 评论 -
线段树
线段树是很强大的数据结构,但本人感觉线段树不如树状数组好用。下面是一段代码:#include#include#include#include#define N 50005using namespace std;int tree[4*N];int n;void add(int l,int r,int pos,int p,int v){ tree[pos]+=v;原创 2013-08-09 16:19:08 · 544 阅读 · 0 评论 -
树状数组求逆序数
#include#includeint num[1004],n;int lowbit(int x){ return x&(-x);}void add(int x)//更新含有x的数组个数{ while(x<=n) { num[x]++; x+=lowbit(x); }}int sum(int x)//向下统计小于原创 2013-09-22 20:52:10 · 549 阅读 · 0 评论 -
树状数组(好)-poj1990
Language:DefaultMooFestTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 4549 Accepted: 1895DescriptionEvery year, Farmer John's N (1 <= N <= 20,0原创 2013-10-27 22:37:17 · 597 阅读 · 0 评论 -
线段树(需要维护左半部分与右半部分)-poj3368
Language:DefaultFrequent valuesTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 11921 Accepted: 4360DescriptionYou are given a sequence of n inte原创 2013-10-22 13:24:53 · 584 阅读 · 0 评论 -
二维树状数组--poj1195
Language:DefaultMobile phonesTime Limit: 5000MS Memory Limit: 65536KTotal Submissions: 13196 Accepted: 6136DescriptionSuppose that the fourth generation m原创 2013-12-10 22:05:13 · 533 阅读 · 0 评论 -
二维树状数组-poj2155
Language:DefaultMatrixTime Limit: 3000MS Memory Limit: 65536KTotal Submissions: 15922 Accepted: 6004DescriptionGiven an N*N matrix A, whose elements are e原创 2013-12-09 22:20:48 · 562 阅读 · 0 评论 -
树状数组upc1976
1976: problem FTime Limit: 3 Sec Memory Limit: 64 MBSubmit: 69 Solved: 10[Submit][Status][Web Board]Description在一个小镇上住着n位武林高手,他们互相之间经常PK,不过PK的时候必须要有一位裁判在场。这个小镇上的房子从1—n依次排列(一条直线上),两个人要单原创 2013-12-03 19:11:19 · 492 阅读 · 0 评论 -
Codeforces Round #225 (Div. 2)(B思维题,E:dfs+树状数组)
A. Coder题意:在一张网格上放置棋子,他能攻击到上下左右的地方,问最多放多少棋子,使其不能相互攻击到,输出一种方法;思路:从第一个开始放,标记其上下左右。#include#include#includeusing namespace std;const int maxn=1005;char grid[maxn][maxn];bool vis[maxn][maxn];原创 2014-02-01 15:55:49 · 632 阅读 · 0 评论 -
线段树-区间合并uva1400(LA3938)
"Ray, Pass me the dishes!"求最大连续和。写起来太蛋疼了,还是因各种细节过不了,忘了考虑,多组满足时x尽量小,y尽量小,查询的时候也是缺这个少那个。。。下面是标程,写的很漂亮,多学习!#include#include#includeusing namespace std;const int maxn = 500000 + 10;const int原创 2014-02-20 21:38:51 · 700 阅读 · 0 评论 -
Codeforces Round #229 (Div. 2)(C,E待续)
A. Inna and Alarm ClockInna loves sleeping very much, so she needs n alarm clocks in total to wake up. Let's suppose that Inna's room is a100 × 100 square with the lower left corner at point原创 2014-02-17 20:06:39 · 858 阅读 · 0 评论 -
树状数组uva1428
思路同poj1990,不多说。代码如下:#include#include#include#includeusing namespace std;typedef long long LL;const int maxn=20010;struct node{ int v,id;}a[maxn];int tree[maxn*4],n;bool cmp(node a,n原创 2014-02-19 20:11:58 · 518 阅读 · 0 评论 -
树状数组uva12086
树状数组修改某个点的值#include#include#include#includeusing namespace std;const int maxn=200020;int tree[maxn],N,a[maxn];void init(){ for(int i=0;i<=N;i++)tree[i]=0;}void update(int x,int old,int原创 2014-03-02 22:40:01 · 511 阅读 · 0 评论 -
线段树点修改uva12299
题意:给定一个长度为n的序列A,可以对其进行一下两种操作:1、query (L, R) 查询区间[L,R]的最小值2、shift(i1, i2,i3,..., ik)(i1 i2 ik, k > 1) 把元素A[i1],A[i2],…,A[ik]循环移动#include#include#include#includeusing namespace std;cons原创 2014-03-04 21:41:29 · 485 阅读 · 0 评论 -
二维线段树区间修改(add,set)uva11992
长春现场赛的时候遇到了一个二维线段树,当时不会写,看了这个题之后,原来二维线段树就是第一维是线段树,然后开成一个数组就成了二维线段树。对于区间修改和把整体改成某个值得写法思路理清了也比较简单。#include#include#include#include#includeusing namespace std;const int maxn=1<<17;const int IN原创 2014-03-06 21:46:01 · 1539 阅读 · 0 评论 -
线段树优化康拓展开uva11525
题意:有一个排列1~k,求第n个排列,其中n为 ,K(1≤K≤50000),S1, S2 ,…, Sk.(0≤Si≤K-i).分析:这道题目乍看之下没有什么好的思路,k!太大了,但是仔细看一看就会发现n和康托展开式很类似如果不知道康托展开的话请看:http://www.doc88.com/p-293361248346.html转载 2014-03-07 17:04:04 · 571 阅读 · 0 评论 -
树状数组uva1513(好)
题意:有一堆电影,按1-n顺序排,有m次操作,每次询问第ai个电影之前有多少个电影,然后将其抽出放在堆顶。思路:pos数组保存位置(倒序排列,便于更新)#include#include#include#includeusing namespace std;const int maxn=100010;const int MAX=200010;int n,m;int tree[原创 2014-03-13 15:47:44 · 629 阅读 · 0 评论 -
Codeforces Round #197 (Div. 2)(d线段树)
A - Helpful Maths水题不多说#include#include#include#include#includeusing namespace std;int main(){ int a[105],n=0; string s; cin>>s; for(int i=0;i<s.size();i++) if(s[原创 2014-03-09 09:50:09 · 551 阅读 · 0 评论 -
线段树整理
http://www.notonlysuccess.com/index.php/segment-tree-complete/转载 2014-03-27 22:46:49 · 376 阅读 · 0 评论 -
线段树区间合并poj3667
题意:1 a表示如果有长度为a的原创 2014-04-27 16:54:17 · 479 阅读 · 0 评论 -
线段树扫描线upcoj2540
2540: Monitoring SystemTime Limit: 5 Sec Memory Limit: 128 MBSubmit: 31 Solved: 7[Submit][Status][Web Board]DescriptionBCBC is a large bank. To ensure safety, they have set many cameras原创 2014-03-28 21:06:14 · 448 阅读 · 0 评论 -
线段树区间更新poj3468
#include#include#include#includeusing namespace std;const long long maxn=100100;long long n;long long a[maxn];long long ans;struct IntevalTree{ long long sum[maxn<<3]; long long ad原创 2014-04-14 21:17:20 · 419 阅读 · 0 评论 -
线段树区间维护upcoj
维护了好多东西。。。#include#include#include#includeusing namespace std;const int maxn=4*100010;int n,m;char s[maxn/4];struct IntervalTree{ int maxd[maxn],maxi[maxn],lz[maxn],rz[maxn],lin[maxn],r原创 2014-03-30 17:00:48 · 587 阅读 · 0 评论 -
线段树区间更新+poj2528
题意:贴海报,问能看见几张思路:离散化一下,原创 2014-04-16 22:56:19 · 462 阅读 · 0 评论 -
线段树交并补+poj3225
Language:Default简体中文Help with IntervalsTime Limit: 6000MS Memory Limit: 131072KTotal Submissions: 9602 Accepted: 2282Case Time Limit: 2000MSDescription原创 2014-04-18 16:34:30 · 615 阅读 · 0 评论 -
线段树点修改hdu1166
以前写过树状数组的,原创 2014-04-04 17:06:04 · 433 阅读 · 0 评论 -
线段树维护区间最大值hdu1754
基本通上一篇#include#include#include#includeusing namespace std;const int maxn=200010;const int INF=1000000000;int A[maxn],n,m;struct IntevalTree{ int sum[maxn<<3]; void maintain(int o)原创 2014-04-04 17:14:30 · 1056 阅读 · 0 评论 -
线段树扫描线(周长并)hdu1828
每个线段树的节点要记录几个信息1.l,r,该节点代表的线段的左右端点坐标2.lp,rp,是一个标记量,只有0,1,表示这个节点左右两个端点没有被覆盖,有为1,无为03.cnt,表示这个区间被重复覆盖了几次4.len,这个区间被覆盖的长度5.num,这个区间被多少条线段覆盖好像区间[0,10],被[1,2],[4,5]覆盖,那么num=2好像区间[0,10],被[1,3]原创 2014-03-29 22:37:32 · 597 阅读 · 0 评论 -
线段树求逆序数hdu1394
先用线段树或者树状数组求出原序列的原创 2014-04-06 21:55:38 · 495 阅读 · 0 评论 -
uva1232
#include#include#include#include#include#include#include#include#include#define INF 0x3f3f3f3f#define MAXN 100010#define MAXM 35#define MAXNODE 4*MAXN#define eps 1e-9#define pi 4*atan(1.原创 2014-03-26 22:01:15 · 510 阅读 · 0 评论 -
线段树点修改hdu2795
题目大意: 有一块h*w的矩形广告板,要往上面贴广告; 然后给n个1*wi的广告,要求把广告贴上去; 而且要求广告要尽量往上贴并且尽量靠左; 求第n个广告的所在的位置,不能贴则为-1;原创 2014-04-08 22:19:07 · 419 阅读 · 0 评论 -
线段树区间修改hdu1698
最基本的线段树区间修改,设置延迟标记#include#include#include#includeusing namespace std;const int maxn=100100;int n;struct IntevalTree{ int sum[maxn<<2]; int setv[maxn<<2]; void build(int o,int l,原创 2014-04-09 22:05:41 · 452 阅读 · 0 评论 -
树套树+二维线段树+hdu4819
长春现场赛的题目,当时不会写,比较裸的一道而为线段树原创 2014-04-25 14:57:28 · 648 阅读 · 0 评论 -
二维线段树维护最大值hdu1823
思路:很落得西安读书原创 2014-07-14 14:39:12 · 608 阅读 · 0 评论 -
线段树点更新poj2828
思路:从后向前处理,线段树维护区间总的空位数原创 2014-06-29 10:32:56 · 409 阅读 · 0 评论 -
线段树点更新(好)hdu4288
CoderTime Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2799 Accepted Submission(s): 1117Problem Description In mathematics and c原创 2014-07-19 18:16:08 · 417 阅读 · 0 评论