FZU 2171(线段树的延迟标记)
2024-10-20 01:37:05
题意:容易理解。
分析:时隔很久,再一次写了一道线段树的代码,之前线段树的题也做了不少,包括各种延迟标记,但是在组队分任务之后,我们队的线段树就交给了另外一个队友在搞,
然后我就一直没去碰线段树的题了,但是我现在发现这种做法不是很好,导致我现在的思维受到了很大的局限性,所以我现在想纠正这种错误,该做的就应该去做,就像
高中一样不能太偏科!一道比较简单的线段树延迟标记!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath> struct node{
int l , r;
int sum;
int color;
}tree[*]; int n,len,a[]; void buildTree(int l,int r,int n)
{
int mid = (l + r) >> ;
tree[n].l = l;
tree[n].r = r;
tree[n].color = ;
if(l == r)
{
tree[n].sum = a[l];
return ;
} buildTree(l,mid,n*);
buildTree(mid+,r,n*+);
tree[n].sum = tree[n*].sum + tree[n*+].sum;
} void pushDown(int n)
{
tree[n*].sum = tree[n*].sum - (tree[n*].r - tree[n*].l + ) * tree[n].color;
tree[n*+].sum = tree[n*+].sum - (tree[n*+].r - tree[n*+].l + ) * tree[n].color;
tree[n*].color += tree[n].color;
tree[n*+].color += tree[n].color;
} int calSum(int x,int y,int n)
{
int mid = (tree[n].l + tree[n].r) >> ;
if(tree[n].l==x && tree[n].r == y)
return tree[n].sum;
if(tree[n].color)
{
pushDown(n);
tree[n].color = ;
} if(y <= mid)
return calSum(x , y , n*);
else if(x>mid)
return calSum(x , y , n*+);
else
return calSum(x , mid , n*) + calSum(mid+ , y , n*+);
} void update(int x , int y , int n)
{
int mid = (tree[n].l + tree[n].r) >> ; if(tree[n].l == x && tree[n].r == y)
{
tree[n].sum = tree[n].sum - (tree[n].r - tree[n].l + );
tree[n].color ++;
return ;
}
if(y <= mid)
update(x , y , n*);
else if(x > mid)
update(x , y , n*+);
else
{
update(x , mid , n*);
update(mid+ , y , n*+);
}
tree[n].sum = tree[n*].sum + tree[n* + ].sum;
} int main()
{
int i,q,x;
while(scanf("%d%d%d",&n,&len,&q)!=EOF)
{
for(i=;i<=n;i++)
scanf("%d",&a[i]);
buildTree(,n,);
while(q--)
{
scanf("%d",&x);
printf("%d\n",calSum(x , x+len- , ));
update(x , x+len- , );
}
}
return ;
}
最新文章
- C#在winform中调用系统控制台输出
- Jackson
- Postgresql 帐号密码修改方法
- java 进制转换
- fork和exec一起使用
- zip生成
- 天灵灵,地灵灵,但愿这个一定灵!!!python调用win32api,启动应用程序窗口
- 探索Microsoft.NET目录
- openstack 镜像自动扩容 resize拉伸
- POJ - 2653 - Pick-up sticks 线段与线段相交
- 关于Python的self指向性
- Zookeeper与Kafka集群搭建
- 洛谷 P2587 解题报告
- python 日常错误整理
- 高通sdm845_la2.0源码编译及使用QFIL刷机
- Xaml引用图片路径的方式
- BZOJ1069 SCOI2007 最大土地面积 凸包、旋转卡壳
- jmeter counter函数问题
- kendo treeview checkbox初始化选中问题,没解决,暂时记录下
- .net平台常用组建
热门文章
- IOS中延时执行的几种方式的比较
- 一行代码设置TForm颜色的前世今生(属性赋值引起函数调用,然后发消息实现改变显示效果),TForm的初始颜色在dfm中设置了clBtnFace色
- CentOS下对Apache的中文乱码处理
- HDU5092——Seam Carving(动态规划+回溯)(2014上海邀请赛重现)
- PHP 练习租房
- 日期工具类 - DateUtil.java
- js动态判断密码强度&;&;实用的 jQuery 代码片段
- Java中的public、protected、default和private的区别
- CSS3之创建透明边框三角
- iPad中控制器view的width和height