P1243~P1247 线段树模板题总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1243~P1247 线段树模板题总结相关的知识,希望对你有一定的参考价值。
前言
这几天刚刚刷了5道线段树(水)题,现在来总结一下。
首先是犯的不少错误:
1.建树、更新函数没有return。这是最气的,每次最后程序错误查了半天也没查出来,最后发现是没有return。递归边界要return,递归边界要return,递归边界要return,重要的事情说三遍。
2.判断查找区间于线段的变量写反。听说这个是常犯错误。
然后说一下学线段树的收获。线段树的代码量的确多,很能练自己的思维,而且学的过程中简单的理解了一下#define的用处。线段树用来解决区间查询,区间修改都很方便,而且复杂度是log n级别,比单纯暴力快很多。而且用递归的线段树也很好理解,并且有助于理解二叉树的结构【strork这个弱鸡很懒,并没有看过二叉树】。
题目
首先P1243 P1244没什么说的,一个点修改一个区间修改,纯模板题。
至于P1245售票系统:
描述 Description 某次列车途经C个城市,城市编号依次为1到C,列车上共有S个座位,铁路局规定售出的车票只
能是坐票, 即车上所有的旅客都有座。售票系统是由计算机执行的,每一个售票申请包含三个参数,分别
用O、D、N表示,O为起始站,D为目的地站,N为车票张数。售票 系统对该售票申请作出受理或不受理的
决定,只有在从O到D的区段内列车上都有N个或N个以上的空座位时该售票申请才被受理。请你写一个程序,
实现这个自动售票系统。 输入格式 Input Format 第一行包含三个用空格隔开的整数C、S和R,其中1≤C≤60000, l≤S≤60000,1≤R≤60000。
C为城市个数,S为列车上的座位数,R为所有售票申请总数。接下来的R行每行为一个售票申请,用三个
由空格隔开的整数O,D和N表示,O为起始站,D 为目的地站,N为车票张数,其中1≤D≤C,1≤O≤C,所有的
售票申请按申请的时间从早到晚给出。 输出格式 Output Format 输出共有R行,每行输出一个“YES”或“NO”,表示当前的售票申请被受理或不被受理。 样例输入 Sample Input 4 6 4 1 4 2 1 3 2 2 4 3 1 2 3 样例输出 Sample Output YES YES NO NO 时间限制 Time Limitation 1s
这道题也很好思考,对每个数据先updata然后search,如果返回的值大于座位数,那么就把刚刚的票取消,即updata的偏移量,记录值为负数
x=ax; y=ay-1; updatait(1,n,1); int ans=findit(1,n,1); if(ans<=s) cout<<"YES"<<endl; else{ cout<<"NO"<<endl; t=-t; updatait(1,n,1); }
至于P1246,刚开始我像P1245一样做的,然而问题是这个相当于每个座位数并不固定。
描述 Description Farmer John最近新建立了一个农场,并且正在接受奶牛的畜栏分配请求,有些 畜栏会看到农场美妙的风景。:) 农场由N (1 <= N <= 100,000) 个畜栏组成,编号为1..N,畜栏i可以最多容纳C_i只奶牛 (1 <= C_i <= 100,000)。奶牛i希望得到连续的一段畜栏,表示为一段区间 (A_i,B_i) 。 这样的话奶牛可以在这段牛棚里面转悠。(当然,这段畜栏必须要有足够的空间) 给出M (1 <= M <= 100,000) 个请求,请求出不超过畜栏承载量的情况下,最多可以满足的请求数。 考虑下面展示的一个农场: 【在下面】 FJ 不能够同时满足4头奶牛的请求,否则3,4号畜栏就会有太多的奶牛。 考虑到奶牛2的请求需要一个区间包含3号和4号畜栏,我们尝试这样一种方案,让1,3,4号奶牛 的请求都得到满足,这样没有畜栏超出容量的限制,因此,对于上述情况的答案就是3,三头奶牛 (1,3,4号)的要求可以得到满足。 输入格式 Input Format 第1行:两个用空格隔开的整数:N和M * 第2行到N+1行:第i+1行表示一个整数C_i * 第N+2到N+M+1行: 第i+N+1行表示2个整数 A_i和B_i 输出格式 Output Format * 第一行: 一个整数表示最多能够被满足的要求数 样例输入 Sample Input 5 4 1 3 2 1 3 1 3 2 5 2 3 4 5 样例输出 Sample Output 3 时间限制 Time Limitation 1s
解决思路可以反着来:先建树,然后要这头牛就将区间--;
注意的是需要提前预处理,将奶牛按照右端点升序排列,如果右端点相等排左端点,然后一只一只往里放;
》》》》》》》》》P1247 贪婪大陆 请参考山神dydxh的博客: 链接:http://dydxh1998.blog.163.com/blog/static/2382091122015231141472/
以上。
以上是关于P1243~P1247 线段树模板题总结的主要内容,如果未能解决你的问题,请参考以下文章