这就是很简单的基本的线段树的基本操作,区间修改,区间查询,对区间内部信息打上laze标记,然后维护即可。

我自己做的时候太傻逼了。。。把区间修改写错了,对给定区间进行修改的时候,mid取的是节点的左右的中间值,而不是更新区间的中间值(太菜了)。

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxx = 4e5+;
struct node{
int l,r,val,add;
}tree[maxx];
inline L(int r){return r<<;};
inline R(int r){return r<<|;};
inline MID(int l,int r){return (l+r)>>;};
void pushdown(int root){
if (tree[root].add){
tree[L(root)].add=tree[root].add;
tree[R(root)].add=tree[root].add;
tree[L(root)].val=(tree[L(root)].r-tree[L(root)].l+)*tree[root].add;
tree[R(root)].val=(tree[R(root)].r-tree[R(root)].l+)*tree[root].add;
tree[root].add=;
}
}
void buildtree(int root,int l,int r){
tree[root].l=l;
tree[root].r=r;
tree[root].add=;
tree[root].val=;
if (l==r){
tree[root].val=;
return;
}
int mid=MID(l,r);
buildtree(L(root),l,mid);
buildtree(R(root),mid+,r);
tree[root].val=tree[L(root)].val+tree[R(root)].val;
}
void update(int root,int ul,int ur,int c){
int l = tree[root].l,r=tree[root].r;
if (ul<=l && r<=ur){
tree[root].val=(r-l+)*c;
tree[root].add=c;
return;
}
int mid=MID(l,r);//这里一定要注意是取root左右界的中点
if (ul<=mid)
{
pushdown(root);
update(L(root),ul,ur,c);
}
if (ur>mid)
{
pushdown(root);
update(R(root),ul,ur,c);
}
tree[root].val=tree[L(root)].val+tree[R(root)].val;
}
int main(){
int t,n,cas=,q;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&q);
memset(tree,,sizeof(tree));
buildtree(,,n);
int x,y,z;
while(q--){
scanf("%d%d%d",&x,&y,&z);
update(,x,y,z);
}
printf("Case %d: The total value of the hook is %d.\n",++cas,tree[].val);
}
return ;
}

HDU - 1698 线段树区间修改,区间查询的更多相关文章

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

    In the game of DotA, Pudge's meat hook is actually the most horrible thing for most of the heroes. T ...

  2. E - Just a Hook HDU - 1698 线段树区间修改区间和模版题

    题意  给出一段初始化全为1的区间  后面可以一段一段更改成 1 或 2 或3 问最后整段区间的和是多少 思路:标准线段树区间和模版题 #include<cstdio> #include& ...

  3. hdu 1698 线段树 区间修改

    #include <cstdio> #include <cstdlib> #include <cmath> #include <map> #includ ...

  4. [线段树]区间修改&区间查询问题

    区间修改&区间查询问题 [引言]信息学奥赛中常见有区间操作问题,这种类型的题目一般数据规模极大,无法用简单的模拟通过,因此本篇论文将讨论关于可以实现区间修改和区间查询的一部分算法的优越与否. ...

  5. HDU 1698 线段树 区间更新求和

    一开始这条链子全都是1 #include<stdio.h> #include<string.h> #include<algorithm> #include<m ...

  6. hdu 1698 线段树 区间更新 区间求和

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  7. SPOJ GSS2 - Can you answer these queries II(线段树 区间修改+区间查询)(后缀和)

    GSS2 - Can you answer these queries II #tree Being a completist and a simplist, kid Yang Zhe cannot ...

  8. SPOJ BGSHOOT - Shoot and kill (线段树 区间修改 区间查询)

    BGSHOOT - Shoot and kill no tags  The problem is about Mr.BG who is a great hunter. Today he has gon ...

  9. HDU(1698),线段树区间更新

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 区间更新重点在于懒惰标记. 当你更新的区间就是整个区间的时候,直接sum[rt] = c*(r- ...

随机推荐

  1. java----字符串的大写字母右移

    import java.util.Scanner; /** * Created by Admin on 2017/3/27. */ public class test02 { public stati ...

  2. ajax调用WebService实现数据库操作

    首先说下测试环境和思路: 前端收集数据转换成json格式传输到后端,处理并存入数据库 1.数据库操作: [WebMethod] public string InsertPoint(string dat ...

  3. 自动化测试基础篇--Selenium等待时间

    摘自https://www.cnblogs.com/sanzangTst/p/8376221.html 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面 ...

  4. xpath语法大全

    XPath 节点 XPath 术语 节点 在 XPath 中,有七种类型的节点:元素.属性.文本.命名空间.处理指令.注释以及文档(根)节点.XML 文档是被作为节点树来对待的.树的根被称为文档节点或 ...

  5. JavaScript实现元素拖动性能优化

    前言:前几天没事干写了个小网站,打算用原生的javascript实现元素的拖动,但是事情并没有想象的那么顺利,首先是实现了拖动的元素卡的不能再卡,简直不能够,上图~~ 看见没?这就是效果,简直让人欲哭 ...

  6. Linux: yum配置说明

    下面是利用 man yum.conf 命令获取到的有关yum配置的说明: yum.conf(5) yum configuration file yum.conf(5) NAME yum.conf - ...

  7. php学习----错误处理和代码重用

    php错误处理 一.错误分类:1.语法错误 2.运行时错误 3.逻辑错误 错误代号(部分): 所有看到的错误代码在php中都被定义为系统常量(可以直接使用) 1)系统错误 E_PARSE:编译错误,代 ...

  8. Windows 命令行

     1.d: 进入d盘  2.dir(directory)   显示当前文件夹下的所有内容  3.md (make directory) +文件夹名 在当前文件夹下创建文件夹  4.rd (remove ...

  9. Markdown编辑器开发记录(二):Markdown编辑器的使用与开发入门

    Markdown编辑器的使用与开发入门 在部门做技术分享的时候简单整理了一下手里的资料 1 是什么 1.1 Markdown是一种轻量级标记语言 Markdown是一种轻量级标记语言,创始人为约翰·格 ...

  10. 如何学习sss和前端数据处理

    1.学习scss,就看这篇:http://www.ruanyifeng.com/blog/2012/06/sass.html 就够了,因为sass的出现本来就是为了简化工作提高效率,也不算什么深奥精妙 ...