ZOJ 2706 Thermal Death of the Universe (线段树)

题目链接:ZOJ 2706 Thermal Death of the Universe (线段树)

题意:n个数。m个操作。

每一个操作(a,b)表示(a,b)全部值更新为这个区间的平均数:1.当前的数列总和小于等于原数列总和。取平均值的上界,反之。取下界。

注意有负数的情况。

AC代码:

#include<stdio.h>
#include <math.h>
#define LL long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int maxn=30010;
const LL INF=0xffffffffffff;
struct node
{LL l,r,laz;LL sum;LL mid(){return (l+r)/2;}
};
struct node tree[maxn<<2];
LL pre;
void build(LL l,LL r,LL rt)
{tree[rt].l=l;tree[rt].r=r;tree[rt].laz=INF;if(tree[rt].l==tree[rt].r){scanf("%lld",&tree[rt].sum);return ;}LL m=tree[rt].mid();build(lson);build(rson);tree[rt].sum=tree[rt<<1].sum+tree[rt<<1|1].sum;
}void PushDown(LL rt,LL m)
{if(tree[rt].laz!=INF){tree[rt<<1].laz=tree[rt].laz;tree[rt<<1|1].laz=tree[rt].laz;tree[rt<<1].sum=(m-(m>>1))*tree[rt].laz;tree[rt<<1|1].sum=(m>>1)*tree[rt].laz;tree[rt].laz=INF;}
}void updata(LL L,LL R,LL add,LL rt)
{if(L<=tree[rt].l && tree[rt].r<=R){tree[rt].laz=add;tree[rt].sum=(tree[rt].r-tree[rt].l+1)*add;return ;}LL m=tree[rt].mid();PushDown(rt,tree[rt].r-tree[rt].l+1);if(R<=m)updata(L,R,add,rt<<1);else if(L>m)updata(L,R,add,rt<<1|1);else{updata(L,R,add,rt<<1);updata(L,R,add,rt<<1|1);}tree[rt].sum=tree[rt<<1].sum+tree[rt<<1|1].sum;
}LL query(LL L,LL R,LL rt)
{if(L<=tree[rt].l && tree[rt].r<=R){return tree[rt].sum;}LL m=tree[rt].mid();PushDown(rt,tree[rt].r-tree[rt].l+1);LL ret=0;if(R<=m)ret+=query(L,R,rt<<1);else if(L>m)ret+=query(L,R,rt<<1|1);else{ret+=query(L,R,rt<<1);ret+=query(L,R,rt<<1|1);}return ret;
}int main()
{LL a,b,i;LL n,m;LL ans;double ave;//printf("%lld\n",INF);while(scanf("%lld %lld",&n,&m)!=EOF){//memset(tree,0,sizeof tree);build(1,n,1);pre=0;for(i=1;i<=n;i++)pre+=query(i,i,1);while(m--){scanf("%lld%lld",&a,&b);LL sum=query(a,b,1);ave=1.0*sum/(b-a+1);if(query(1,n,1)<=pre)ans=(LL)ceil(ave);elseans=(LL)floor(ave);updata(a,b,ans,1);}for(i=1;i<n;i++)printf("%lld ",query(i,i,1));printf("%lld\n\n",query(i,i,1));}
return 0;
}
/*
6 1
1 2 3 4 5 6
1 6
6 2
1 2 3 4 5 6
2 6
1 5
1 11 1
1
1 16 2
1 1 1 3 1 1
3 4
4 56 4
1 2 3 4 5 6
1 2
2 6
1 3
2 53 3
-1 -1 -2
1 2
2 3
1 3
*/

posted on 2017-07-15 15:56 mthoutai 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/mthoutai/p/7182988.html

ZOJ 2706 Thermal Death of the Universe (线段树)相关推荐

  1. ZOJ - 2706 Thermal Death of the Universe(线段树)

    题目链接:点击查看 题目大意:给定包含n个数的序列,然后是m次操作,每次操作给出两个数l,r表示一个闭区间[l,r],要求令闭区间中的数替换为该闭区间的平均数,对于平均数有以下规定: 若平均数为整数, ...

  2. ZOJ 3597 Hit the Target! (线段树扫描线 -- 矩形所能覆盖的最多的点数)

    ZOJ 3597 题意是说有n把枪,有m个靶子,每把枪只有一发子弹(也就是说一把枪最多只能打一个靶子), 告诉你第 i 把枪可以打到第j个靶, 现在等概率的出现一个连续的P把枪,在知道这P把枪之后,你 ...

  3. ZOJ 1610 Count the Colors (线段树区间更新)

    题目链接 题意 : 一根木棍,长8000,然后分别在不同的区间涂上不同的颜色,问你最后能够看到多少颜色,然后每个颜色有多少段,颜色大小从头到尾输出. 思路 :线段树区间更新一下,然后标记一下,最后从头 ...

  4. zoj 3511 Cake Robbery(线段树)

    题目链接:zoj 3511 Cake Robbery 题目大意:就是有一个N边形的蛋糕.切M刀,从中挑选一块边数最多的.保证没有两条边重叠. 解题思路:有多少个顶点即为有多少条边,所以直接依照切刀切掉 ...

  5. POJ 2777 ZOJ 1610 HDU 1698 --线段树--区间更新

    直接将这3题 放一起了  今天在做线段树的东西 这3个都是区间更新的 查询方式互相不同 反正都可以放到一起吧 直接先上链接了 touch me touch me touch me 关于涉及到区间的修改 ...

  6. ZOJ 1610 Count the Colors 【线段树】

    <题目链接> 题目大意: 在[0,8000]这个区间内,不断进行一些操作,将其中的一些区间染成特定颜色,如果区间重复的话,后面染的色块会覆盖前面染的色块,问最终[0,8000]这个区间内每 ...

  7. CodeForces - 1437G Death DBMS(AC自动机fail树上树链剖分建线段树/暴跳fail)

    题目链接:点击查看 题目大意:给出 n 个模式串,每个模式串初始时的权值为 0,然后有 m 次操作: 1 i x:将第 i 个模式串的权值修改为 x 2 s:给出一个字符串 s,询问字符串 s 作为主 ...

  8. 线段树 + 矩阵 --- ZOJ 3772 Calculate the Function

    Calculate the Function Problem's Link:   http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCod ...

  9. ZOJ 3886 Nico Number (线段树)

    题目地址:ZJU 3886 这个题需要想到一点,因为对一个数x不断取模的话,而且设定他小于模才会进行取余操作的话,那么最多只会进行logx次,因为每次取模都会使x最少折半.然后想到了这点就很好做了.对 ...

  10. codefores 786B. Legacy(最短路,线段树优化拆点,好题)

    题目链接 B. Legacy time limit per test2 seconds memory limit per test256 megabytes inputstandard input o ...

最新文章

  1. DNS子域授权及view(三)
  2. docker之Dockerfile指令介绍
  3. 世界云计算机公司,2019年全球云计算企业排行榜TOP50
  4. python完整安装顺序_Python安装与卸载流程详细步骤(图解)
  5. 前端学习(505):垂直居中的第一种方式的优点和缺点
  6. 运营管理整改报告范文_整改报告 反馈问题整改报告范文精选5篇
  7. Python内置模块和第三方模块
  8. 无需SherlockActionbar的SlidingMenu使用详解(二)——向Fragment中添加ViewPager和Tab
  9. termux 开启 sshd
  10. Go 语言学习总结(4)—— 为什么说 Golang 是面向未来的语言?
  11. 一步一步写算法(之二叉树深度遍历)
  12. 2016/2/13 《计算机系统要素》(The Elements of Computing Systems)读书笔记(1)
  13. 解决unable to find a qt build,to solve this problem specify a qt build
  14. 我的团长我的团第三集
  15. [python学习记录]python初步操作mysql
  16. MYSQL分区表学习
  17. 网络分层(7层)以及每层的设备和协议
  18. 星辰大海,不属于任何人,也属于任何人
  19. 使用计算机求函数极限示例
  20. win10系统下找不到hosts文件解决方案

热门文章

  1. 802.11有线等效加密WEP
  2. 微信小程序一行代码实现微信公众号页面代码复用
  3. Netty :仿写微信 IM 即时通讯系统
  4. 评分卡模型监控(后端分析)
  5. phalapi门店管理系统插件,门店erp系统
  6. netty报错LEAK: ByteBuf.release() was not called before it‘s garbage-collected.的解决方法
  7. 微信小程序tarBar使用
  8. 一百馒头一百僧升级版
  9. 产品冷思考:大而全or小而美如何选择?
  10. 计算机科学基础 浙大学分,Zju生存指南-学(上)