随笔分类 - 线段树
摘要:题意:给出N个星星的坐标,level[x]表示在当前节点左下方的星星的个数,然后让你输出level[0] . level[1] .....的值。星星的坐标按y的升序给出。思路:简单线段树,每当给出一个坐标,在他所在区间就自加1,然后查到该节点,得出在左下方的星星数,就可以了。看代码吧,View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>#include <queue>
阅读全文
摘要:题意:有N个点是连通的,现在给出Q个操作,D是破坏这个点,R是恢复最近被破坏的点,Q是询问与这个点相连的点的个数。思路:这题与上次比赛的最后一题有点相似,比赛的题是让求从该点往后的相同的字符的个数,而这题是求与这个点相连的点,包括前后。其实线段树也很好理解,节点设四个标记,最左端点,最右端点,从左端点开始,与左端点相连的点的个数,从右端点开始,与右端点相连的点的个数,随时更新,查询时是,先找到最左端相连的区间,然后不断向右找到不相连的点。呃, 还是看代码吧。代码:View Code #include <stdio.h>#include <stdlib.h>#includ
阅读全文
摘要:题意:N个数字,Q个操作,Q表示询问[s,t]中的数据和,C表示从s到t中的每个数据都加上x;思路:简单的线段树,把每一段放入和存入结构体中,但是如果每次更新都更新到叶子节点的话,会超时,因此在结构体中加入一个标记,记录每个区间的增加量,这样不用再更新到叶子节点,当查询的时候加上即可。代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>#include <queue&
阅读全文
摘要:又一道线段树的题~~很简单的一道题,用数组建树很容易理解线段树的内部结构~~题目大意:有N个人排队,给出他们想插队的位置和他们的标识,问最后的序列是怎样的。看代码吧:#include<stdio.h>#include<stdlib.h>#include<string.h>int f[1000005];int pos[200004],val[200004],s[200004];int n;void built(int t,int lc,int rc)//建树过程{ f[t]=rc-lc+1;//保存n前面有多少空位 if(lc==rc) return ; in
阅读全文
摘要:这是我做的的一道线段树题,虽然不完全是自己想出来的,但是收获依然很大,就从这道题开始我的线段树之旅吧!这道题的意思是:在一面墙上张贴宣传画,可以覆盖按照给定的张贴的顺序,求张贴完所有的画后能够看见几张画。由于题目中给出的数据范围很大,1~10000000,所以首先要离散化,然后在用线段树进行更新查找。贴代码:#include<stdio.h>#include<stdlib.h>#include<string.h>struct node//记录画的位置,以便对输入点进行排序{ int x; int num;}s[20004];struct tree//建线段树
阅读全文

浙公网安备 33010602011771号