题意:容易理解。

分析:时隔很久,再一次写了一道线段树的代码,之前线段树的题也做了不少,包括各种延迟标记,但是在组队分任务之后,我们队的线段树就交给了另外一个队友在搞,

然后我就一直没去碰线段树的题了,但是我现在发现这种做法不是很好,导致我现在的思维受到了很大的局限性,所以我现在想纠正这种错误,该做的就应该去做,就像

高中一样不能太偏科!一道比较简单的线段树延迟标记!

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>struct node{int l , r;int sum;int color;
}tree[100005*4];int n,len,a[100005];void buildTree(int l,int r,int n)
{int mid = (l + r) >> 1;tree[n].l = l;tree[n].r = r;tree[n].color = 0;if(l == r){tree[n].sum = a[l];return ;}buildTree(l,mid,n*2);buildTree(mid+1,r,n*2+1);tree[n].sum = tree[n*2].sum + tree[n*2+1].sum;
}void pushDown(int n)
{tree[n*2].sum = tree[n*2].sum - (tree[n*2].r - tree[n*2].l + 1) * tree[n].color;tree[n*2+1].sum = tree[n*2+1].sum - (tree[n*2+1].r - tree[n*2+1].l + 1) * tree[n].color;tree[n*2].color += tree[n].color;tree[n*2+1].color += tree[n].color;
}int calSum(int x,int y,int n)
{int mid = (tree[n].l + tree[n].r) >> 1;if(tree[n].l==x && tree[n].r == y)return tree[n].sum;if(tree[n].color){pushDown(n);tree[n].color = 0;}if(y <= mid)return calSum(x , y , n*2);else if(x>mid)return calSum(x , y , n*2+1);elsereturn calSum(x , mid , n*2) + calSum(mid+1 , y , n*2+1);
}void update(int x , int y , int n)
{int mid = (tree[n].l + tree[n].r) >> 1;if(tree[n].l == x && tree[n].r == y){tree[n].sum = tree[n].sum - (tree[n].r - tree[n].l + 1);tree[n].color ++;return ;}if(y <= mid)update(x , y , n*2);else if(x > mid)update(x , y , n*2+1);else{update(x , mid , n*2);update(mid+1 , y , n*2+1);}tree[n].sum = tree[n*2].sum + tree[n*2 + 1].sum;
}int main()
{int i,q,x;while(scanf("%d%d%d",&n,&len,&q)!=EOF){for(i=1;i<=n;i++)scanf("%d",&a[i]);buildTree(1,n,1);while(q--){scanf("%d",&x);printf("%d\n",calSum(x , x+len-1 , 1));update(x , x+len-1 , 1);}}return 0;
}

转载于:https://www.cnblogs.com/jiangjing/p/3696080.html

FZU 2171(线段树的延迟标记)相关推荐

  1. 线段树之延时标记(区间修改)及lazy思想

    暴力求解 1.最简单的方法是:在主函数中添加一个循环  进行 r-l+1次单点修改实现区间修改,对于单个元素修改时间复杂度为 O(log2(n)) 所以对于单个区间修改的时间复杂度为 O(n*log( ...

  2. 【BZOJ-28921171】强袭作战大sz的游戏 权值线段树+单调队列+标记永久化+DP...

    2892: 强袭作战 Time Limit: 50 Sec  Memory Limit: 512 MB Submit: 45  Solved: 30 [Submit][Status][Discuss] ...

  3. POJ 3237 Tree (树链剖分 路径剖分 线段树的lazy标记)

    题目链接:http://poj.org/problem?id=3237 一棵有边权的树,有3种操作. 树链剖分+线段树lazy标记.lazy为0表示没更新区间或者区间更新了2的倍数次,1表示为更新,每 ...

  4. HDU 3397 线段树 双懒惰标记

    这个是去年遗留历史问题,之前思路混乱,搞了好多发都是WA,就没做了 自从上次做了大白书上那个双重懒惰标记的题目,做这个就思路很清晰了 跟上次大白上那个差不多,这个也是有一个sets标记,代表这个区间全 ...

  5. 0x43.数据结构进阶 - 线段树

    目录 一.基础线段树 线段树的建树 线段树的单点修改 线段树的区间查询 线段树的延迟标记(懒惰标记) 1.POJ3486 ASimpleProblemwithIntegersA\ Simple\ Pr ...

  6. LibreOJ 6282,6284,6285 数列分块入门6,8,9 树状数组,分块,线段树等.

    分块6 分块8 分块9 终于结尾了. 诶?我定义的常量变成yuzu了?我不要可怜了? 可怜有剧毒!我再用可怜我要爆零了. 好吧其实是因为我研究了橘学.这里我推荐一下Citrus. 分块6 支持插入一个 ...

  7. codeforces 877E. Danil and a Part-time Job (DFS序列+线段树)

    传送门:codeforces 877E 题目大意: 有一颗树,树的每个节点有一盏灯,状态为亮或灭.现在可以进行以下两种操作: 1.pow x,将以 x 为根节点的子树(包括根节点)的所有节点的灯的状态 ...

  8. A Simple Problem with Integers POJ - 3468(线段树+区间查询+区间修改+建树+懒惰标记模板)+(树状数组)

    题意: 有一个数组,有两种操作.1: Q a b 求[a,b]的和 2:C a b c 给[a,b] 的所有元素都加上c. 题目: You have N integers, A1, A2, ... , ...

  9. P1083 借教室(标记永久化线段树/二分+前缀和)难度⭐⭐⭐★

    P1083 借教室 标记永久化线段树 很典型的区间修改问题,先输入赋值建树(这就是最典型的线段树呀,别忘了),然后修改 这里问的是是否有足够的空教室,所以线段树中 min 代表的是当前区间内最小的剩余 ...

最新文章

  1. 一起谈.NET技术,初识Silverlight 4及其架构
  2. linux deepin20.5配置WebStorm桌面快捷方式:webstorm.desktop
  3. GDCM:gdcm::Value的测试程序
  4. 【Docker-Ubuntu】ubuntu16.04 docker 使用记录
  5. Pycharm Anaconda 安装dlib
  6. Java开发实用的面试题及参考答案
  7. 计算机网络与通信之计算机网络体系结构
  8. 有一种英语口音,不仅一般人儿听不懂,连各种语音识别都全军覆没…(新版)...
  9. 猜词游戏(类似于Hang子手)
  10. [rock]Life ’s A Struggle -宋岳庭(转)
  11. 怎样消掉计算机桌面阴影,怎么去掉桌面阴影 电脑桌面图标出现蓝色阴影怎么办...
  12. 前端项目怎样合理使用模块化和闭包?
  13. word里输入向上或向下取整符号
  14. 目标跟踪经典算法汇总(持续更新...)
  15. 用python测测你身体是否健康
  16. English Learning - L1-12 情态动词 + 倒装 2023.1.12 周四
  17. python unescape函数_Python escape.url_unescape方法代碼示例
  18. Linux内核源码分析:基于最新的Linux 4.0内核(学习路线总结)
  19. 龙族幻想服务器维护多长时间,【龙族幻想】4月1日维护公告
  20. 数字孪生“警视” 警务情指一体可视化决策系统

热门文章

  1. 内蒙古自治区2021高考成绩查询时间,内蒙古2021年高考成绩什么时候出来?
  2. 关于mysql和oracle错误的有_关于MySQL与Oracle的区别
  3. lisp改图元字体式样_一个更改尺寸类型的LISP程序
  4. 005_Spring Data JPA条件查询
  5. 自定义组合控件:Banner、轮播图、广告栏控件
  6. 重启修复计算机怎么操作,如何以安全模式启动电脑,修复系统故障,这4个方法值得一试...
  7. cmake交叉编译android,CMake Android 交叉编译
  8. androidstudio返回之前界面_charles 如何修改服务器返回内容 - Breakpoints
  9. Spark详解(四):Spark组件以及消息通信原理
  10. Hadoop详解(十二):Yarn资源调度策略