hdu1556

Color the ball

Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 9143    Accepted Submission(s): 4677
Problem Description
N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗?
Input
每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <= N)。
当N = 0,输入结束。
Output
每个测试实例输出一行,包括N个整数,第I个数代表第I个气球总共被涂色的次数。
Sample Input
3 1 1 2 2 3 3 3 1 1 1 2 1 3 0
Sample Output
1 1 1 3 2 1
<pre name="code" class="cpp">#include"stdio.h"
#include"string.h"
#include"iostream"
#include"map"
#include"string"
#include"queue"
#include"stdlib.h"
#include"math.h"
#define M 100009
#define eps 1e-8
#define inf 1000000000
#define mod 1000000000
#define INF 1000000000
using namespace std;
struct st
{int l,r,sum,add,mark;
}a[M*4];
int ans;
void make(int l,int r,int k)
{a[k].l=l;a[k].r=r;a[k].mark=0;a[k].add=0;if(l==r){a[k].sum=0;return ;}int mid=(l+r)/2;make(l,mid,k*2);make(mid+1,r,k*2+1);a[k].sum=a[k*2].sum+a[k*2+1].sum;
}
void updata(int l,int r,int p,int k)
{if(a[k].l==l&&a[k].r==r){a[k].sum+=(r-l+1);a[k].add+=p;//当多次刚好更新还区间的时候,只更新到该区间,所以要连加a[k].mark=1;return;}if(a[k].mark){a[k*2].sum+=(a[k*2].r-a[k*2].l+1)*a[k].add;a[k*2].add+=a[k].add;a[k*2].mark=1;a[k*2+1].sum+=(a[k*2+1].r-a[k*2+1].l+1)*a[k].add;a[k*2+1].add+=a[k].add;a[k*2+1].mark=1;a[k].mark=0;a[k].add=0;//当向下延伸的时候,需要把当前区间赋为0,}int mid=(a[k].l+a[k].r)/2;if(r<=mid)updata(l,r,p,k*2);else if(l>mid)updata(l,r,p,k*2+1);else{updata(l,mid,p,k*2);updata(mid+1,r,p,k*2+1);}a[k].sum=a[k*2].sum+a[k*2+1].sum;
}
void query(int p,int k)
{if(a[k].l==p&&a[k].r==p){ans+=a[k].sum;return;}if(a[k].mark){a[k*2].sum+=(a[k*2].r-a[k*2].l+1)*a[k].add;a[k*2].add+=a[k].add;a[k*2].mark=1;a[k*2+1].sum+=(a[k*2+1].r-a[k*2+1].l+1)*a[k].add;a[k*2+1].add+=a[k].add;a[k*2+1].mark=1;a[k].mark=0;a[k].add=0;}int mid=(a[k].l+a[k].r)/2;if(p<=mid)query(p,k*2);elsequery(p,k*2+1);a[k].sum=a[k*2].sum+a[k*2+1].sum;
}
int main()
{int n,i;while(scanf("%d",&n),n){make(1,n,1);int x,y;for(i=1;i<=n;i++){scanf("%d%d",&x,&y);updata(x,y,1,1);}for(i=1;i<=n;i++){ans=0;query(i,1);if(i==1)printf("%d",ans);elseprintf(" %d",ans);}printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/mypsq/p/4348194.html

线段树(成段更新,区间求和lazy操作 )相关推荐

  1. HDU 3397 Sequence operation 线段树 成段更新 区间合并

    比较综合的题. 两个标记  setv,xorr.setv的优先级高于xorr,当一个节点获得一个setv时,他之前的xorr要清除. //#pragma comment(linker, "/ ...

  2. NYOJ 1068 ST(线段树之 成段更新+区间求和)

    ST 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 "麻雀"lengdan用随机数生成了后台数据,但是笨笨的他被妹纸的问题给难住了... 已知len ...

  3. uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)

    线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报  分类: ...

  4. HDU 6203 ping ping ping lca 线段树成段更新

    题目链接:HDU 6203 ping ping ping Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  5. HDOJ 1698 Just a Hook(线段树成段更新)

    题意: 屠夫的钩子区间是1~n,每段可能由铜,银,金组成,价值分别为1,2,3,进行一系列的更新之后,求钩子的总价值. 思路: 线段树的成段更新:要设置一个临时的线段树,每次更新的时候把更新段的值放在 ...

  6. HDU 3974 Assign the task(dfs时间戳+线段树成段更新)

    题意:给定点的上下级关系,规定假设给i分配任务a.那么他的全部下属.都停下手上的工作,開始做a. 操作 T x y 分配x任务y,C x询问x的当前任务: Sample Input 1 5 4 3 3 ...

  7. hdu 1166 敌兵布阵(线段树之 单点更新+区间求和)

    敌兵布阵                                                                             Time Limit: 2000/10 ...

  8. Wikioi 1081 线段树成段更新单点查询

    线段树练习飘逸的写法,自从自己改成这样的写法之后,线段树就没再练过,如今最终练得上了. 由于这里查询仅仅是查询了叶子结点,所以pushUp函数就用不上了,只是我没去掉之前是3ms.去掉之后反而变成4m ...

  9. UVA 12501 Bulky process of bulk reduction ——(线段树成段更新)

    和普通的线段树不同的是,查询x~y的话,给出的答案是第一个值的一倍加上第二个值的两倍一直到第n个值的n倍. 思路的话,就是关于query和pushup的方法.用一个新的变量sum记录一下这个区间里面按 ...

  10. POJ3468 A Simple Problem with Integers【线段树 成段更新+求和 lazy标志】

    用longlong替换__int64也成. #define LL long long 输入输出用%lld Problem: 3468   User: qq1203456195 Memory: 4284 ...

最新文章

  1. C++拾趣——有趣的操作符重载
  2. 柏拉图-理想国(西方哲学的源头)-教你如何思考人生 思考世界 思考社会
  3. Java---------- LeetCode——746. 使用最小花费爬楼梯
  4. Community Server配置对网址中的www信息处理功能分析 [转]
  5. android高德地图搜索地址,地点/周边搜索-Android平台-开发指南-高德地图车机版 | 高德地图API...
  6. echarts图表自适应
  7. python怎么制作游戏图片_【图片】从0开始学用Python做游戏的全过程【精品贴】(不定期更新)【python吧】_百度贴吧...
  8. redis的内存优化【转】
  9. 光源时间_【精品透视】UVLED紫外固化光源崭露头角!
  10. 前端基础-CSS如何布局以及文档流,对于新手来说,特别有用
  11. vue如何获取div的宽度_vue获取dom元素高度的方法
  12. 高校校园网络设计与实现
  13. 腾讯翻译君在线翻译怎么翻译整个文件_很实用的PDF文档在线翻译工具,整篇PDF翻译一键搞定...
  14. ASP.NET(C#版) FileUpload控件
  15. 智能名片小程序开发文档概要
  16. php stripslashes和addslashes的区别
  17. 图解python中的time、datetime模块及他们的时间格式转换(附:格林尼治时间gmt、本地时间、协调世界时utc)
  18. 用python筛选英文txt中的单词,生僻单词
  19. 基于FDC2214的手势识别
  20. 获取手机屏幕大小、密度、分辨率、状态栏、标题栏高度

热门文章

  1. 我去,JS自执行匿名函数竟然有20几种写法!
  2. jQuery将不再支持IE6/7/8
  3. 微软“SharePoint天天向上”第一期线上活动
  4. Kinect2.0学习笔记
  5. 【正一专栏】梅西终老巴萨可被裁判吹掉了已进之球
  6. 哈夫曼编码(Huffman)Java实现代码简化版
  7. (转载)Hadoop2.7.1配置
  8. 交叉编译 FLTK1.3.0
  9. JVM的标配参数和X参数
  10. 线程的状态 Thread.State||NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED