解题思路:基础的线段树区间修改

我按照书上敲的代码不知道为什么WA。。。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int maxn = 1e5;
int n,q,l,r,_sum;
int setv[maxn<<2],sum[maxn<<2];void maintain(int o,int L,int R)
{int lc = o*2, rc = o*2+1;sum[o] = 0;if(R > L){sum[o] = sum[lc] + sum[rc];}else sum[o] = setv[o];
}void pushdown(int o)
{int lc = o*2, rc = o*2+1;if(setv[o] >= 0){setv[lc] = setv[rc] = setv[o];setv[o] = -1;}
}void update(int o,int L,int R,int v)
{int lc = o*2, rc = 2*o+1;if(l <= L && R <= r){setv[o] = v;}else{pushdown(o);int M = (L + R) >> 1;if(l <= M) update(lc,L,M,v);else maintain(lc,L,M);if(r > M)update(rc,M+1,R,v);else maintain(rc,M+1,R);}maintain(o,L,R);
}void query(int o,int L,int R)
{if(setv[o] >= 0){_sum += setv[o] * (min(R,r) - max(L,l) + 1);}else if(l <= L && R <= r){_sum += sum[o];}else{int M = (L + R) >> 1;if(l <= M) query(o*2,L,M);if(r > M) query(o*2+1,M+1,R);}
}int main()
{int v,f;scanf("%d",&n);memset(setv,-1,sizeof(setv));for(int i = 1; i <= n; i++){scanf("%d",&v);l = r = i;update(1,1,n,v);}scanf("%d",&q);while(q--){scanf("%d",&f);if(f == 1){scanf("%d%d%d",&l,&r,&v);update(1,1,n,v);}else{scanf("%d%d",&l,&r);_sum = 0;query(1,1,n);printf("%d\n",_sum);}}return 0;
}

hihocoder #1078 : 线段树的区间修改相关推荐

  1. 线段树(区间修改,区间查询)

    线段树的区间修改 本题如果用单点修改的思想会T,所以需要引入一个数组lazylazylazy , 优秀程序员必备 lazylazylazy定义 此为偷懒 该数组意在储存 treetreetree 数组 ...

  2. 【线段树】区间修改(区间覆盖、区间权值加)标记下放操作的逻辑顺序

    洛谷传送门:月下"毛景树" 由于没有合适的题目,就从这道题入手,解此题时用到的算法/数据结构包括: 树链剖分 线段树(区间覆盖.区间加.区间查询.单点修改) 这道题被我调试了四个小 ...

  3. 线段树(区间修改)模板题 Luogu 2357 守墓人

    众所周知,线段树可以在O( log n)的时间内进行很多修改和查询的操作,应用很广. 线段树,顾名思义,是一个二叉树,但是每个节点,存的不是不是"数",而是一个"区间&q ...

  4. 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, ... , ...

  5. FJUT 借教室 (线段树区间查询+区间修改)

    解题思路:看到题目,经典的区间查询+区间修改,我们用线段树维护一段区间的最小值,每当有新的订单,我们就先查询订单时间范围内的最小教室数量,然后与Dj作比较,如果比dj小,那么我们可以标记为false, ...

  6. 线段树(区间修改 + 根节点查询):Just a Hook

    注意: 懒标记中当分裂的时候会进行pushdown,而pushdown中必定会将当前要被分裂的节点的懒标记值清为0,不留保留下来.因为保留下来的话,当下次进行分裂的时候,又会对此节点进行pushdow ...

  7. szu 寒训个人复习第一天 线段树入门单点修改,区间修改,以及线段树的扩展运用[线段树+dp][区间最大公约数]

    寒讯内容有点过多(其实是我太菜了)水一波怕忘了(人老了)**什么是线段树** 线段树是本蒟蒻感觉用处特别大的算法 那么线段树上面的节点表示什么意思呢? 线段树,上面的节点表示一个区间,父亲节点表示的区 ...

  8. Codeforces Round #742 (Div. 2) E. Non-Decreasing Dilemma (线段树维护区间连续问题)

    题意: 操作1:把x位置的数字修改成y. 操作2:查询[l,r]之间不下降序列的个数. 题解: 线段树维护区间和问题 (这是套路,想不到只能说做题少别打我) . 用五个变量进行维护. sum区间总个数 ...

  9. CodeForces - 1401 F Reverse and Swap(线段树, 区间翻转, 区间交换,清晰易懂)

    CodeForces - 1401 F Reverse and Swap(线段树, 区间翻转, 区间交换)   首先一共有四个操作,第一个和第四个都是线段树的基本操作,直接用线段树实现.      第 ...

最新文章

  1. php esi技术,Php环境搭建 – 巴黎高等计算机学院(ESI-SUPINFO)中国校区技术博客...
  2. 给接口自动化测试框架增色,实现企业微信测试报告
  3. Serializable Parcelable
  4. NYOJ 864 统计
  5. 如何知道远程电脑某一端口是否打开?
  6. 关于mysql启动错误
  7. Oracle数据库链路
  8. 面试题 04.01. 节点间通路
  9. 把日志实时写入数据库
  10. 8. JavaScript 全局对象
  11. (第十一周)俄罗斯方块测试报告
  12. 多仓库带扫描进销存系统(仿电商ERP管理系统源码+数据库)
  13. 机器学习领域著名的期刊与会议
  14. 计算任意多边形的面积(已知各顶点的坐标)
  15. 从首届微商博览会看2015年微商的趋势
  16. CyberCat赛博猫,进阶版AXIE
  17. JAVA计算机毕业设计房屋租赁管理系统Mybatis+系统+数据库+调试部署
  18. 哈工大教授车万翔:自然语言处理中的伪数据
  19. 用c语言,制作一个心形彩色告白图案(附源码)
  20. 用计算机进行计算ppt,用计算器进行计算精要.ppt

热门文章

  1. 悬挑脚手架卸载钢丝绳要求_安全不可忽视!脚手架搭设彩色图集,动画展示施工全过程,抠细节...
  2. 限时免费下载丨《2021 中国游戏市场挑战与机遇盘点》重磅发布!
  3. Maven pom.xml配置详解(三)
  4. Keepalived+HAProxy基于读写分离方式实现discuz论坛
  5. JSONProxy - 获取跨域json数据工具
  6. 浏览器 user-agent 字符串的故事
  7. 【Socket】linux套接字技术之tcp
  8. 工具栏,状态栏(VC_MFC)
  9. 世界顶级精英们的人生哲学(转)
  10. Flex3双向绑定完善版