题目链接: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);
else
ans=(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 1 1 1
1
1 1 6 2
1 1 1 3 1 1
3 4
4 5 6 4
1 2 3 4 5 6
1 2
2 6
1 3
2 5 3 3
-1 -1 -2
1 2
2 3
1 3
*/

最新文章

  1. 使用jsonp跨域请求后可以获得数据,但是进入error方法,返回parseerror
  2. Matlab语法
  3. javaweb中实现在线人数统计
  4. ahjesus fstab修改错误了如何修复
  5. python中的remove趣谈
  6. [连载]JavaScript讲义(05)--- 数据处理
  7. jexus 配置 学习
  8. C#编译器怎么检查代码是否会执行
  9. 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
  10. 整合Spring.net到asp.net网站开发中初探
  11. 从Java虚拟机的内存区域、垃圾收集器及内存分配原则谈Java的内存回收机制
  12. Python将纳入高考?
  13. SystemVerilog语言简介(一)
  14. php面向对象之构造函数作用与方法
  15. 工程无法正常调试运行unknown failure at android.os.Binder.execTransact
  16. Python——查看安装位置和安装的库
  17. 如何将Request对象中的参数列表打印出来
  18. 2. Tensorflow的数据处理中的Dataset和Iterator
  19. [dpdk] dpdk启动几个线程
  20. django 使用 request 获取浏览器发送的参数

热门文章

  1. python之道02
  2. ibatis经验
  3. Spider-天眼查字体反爬
  4. PADS规则设计-对某一网络/元件单独设置规则
  5. Flash学习笔记(01)
  6. C# 中的新增功能
  7. Codeforces Round #277 (Div. 2 Only)
  8. 【树形DP】codeforces K. Send the Fool Further! (medium)
  9. bzoj 2802 [Poi2012]Warehouse Store STL
  10. bzoj 1702 贪心,前缀和