hdu1698"Just a Hook"

题意:

有一个区间s [1,n],每一节si的初始价值为1。定义操作:x y val,将区间[x,y]中的每一个小节的价值改为val。问:经过Q次操作后总区间的价值是多少。
1<=n<=1e5
0<=Q<=1e5

算法/数据结构:

线段树
注意使用:long long scanf("%I64d")

吐槽:

3*10e5我觉得不需要长整型,但不知道为甚用int就是错!艹,搞这个点搞了一晚上。

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e5+3;
ll tree[maxn<<2]; //4被空间,线段树,表示对应树区间的价值
int tag[maxn<<2]; //对应树区间的整体操作标记:1,2,3
void push_up(int rt)//向上更新tree[rt]
{tree[rt] = tree[rt<<1] + tree[rt<<1|1];
}
void push_down(int l, int r, int rt)//向下更新
{if(tag[rt]){//原来有对应区间的整体操作int len = r - l + 1;tag[rt<<1] = tag[rt<<1|1] = tag[rt];tree[rt<<1] = (ll)(len - (len>>1)) * tag[rt];tree[rt<<1|1] = (ll)(len>>1) * tag[rt];tag[rt] = 0;}
}
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1
void build(int l, int r, int rt)
{tag[rt] = 0;if(l == r){tree[rt] = 1;return;}int mid = (l+r) >> 1;build(lson);build(rson);push_up(rt);
}void update(int L, int R, int val, int l, int r, int rt)//对相应区间进行相应操作
{if(L <= l && r <= R){//可以对整个区间进行修改tag[rt] = val;  //标记tree[rt] = (ll)(r - l + 1) * val;return;}push_down(l, r, rt);  //需要破坏当前整体性,向下更新int mid = (l+r) >> 1;if(L <= mid)update(L, R, val, lson);if(R > mid)update(L, R, val, rson);push_up(rt);
}ll query(int L, int R, int l, int r, int rt)//区间查询
{if(L <= l && r <= R){//可以整体返回return tree[rt];}push_down(l, r, rt); //向下查询需要破坏当前区间的整体操作int mid = (l+r) >> 1;ll ret = 0;if(L <= mid) ret += query(L, R, lson);if(R > mid) ret += query(L, R, rson);return ret;
}int main()
{//freopen("in.txt", "r", stdin);int T, n, Q;cin >> T;for(int Case = 1; Case <= T; Case++){scanf("%d%d", &n, &Q);build(1, n, 1); //建树int x, y, val;while(Q--){//每一个操作scanf("%d%d%d", &x, &y, &val);update(x, y, val, 1, n, 1);}printf("Case %d: The total value of the hook is %I64d.\n", Case, query(1, n, 1, n, 1));}return 0;
}

hdu1698(线段树/区间修改/求和)相关推荐

  1. 【模板】线段树区间修改

    区间修改: 区间修改过程类似于区间询问,例如将[ul, ur]内的所有元素都加上v,则进行如下操作: 当当前区间被区间[ul, ur]所包含时, 当前的节点值加上区间长度(r - l  + 1)乘以v ...

  2. python:线段树区间修改 + 区间查询 模板 + 坑点总结

    from functools import reduceclass SegTree:'''支持增量更新,覆盖更新,序列更新,任意RMQ操作基于二叉树实现初始化:O(1)增量更新或覆盖更新的单次操作复杂 ...

  3. POJ 2777 Count Color (线段树区间修改 + 状态压缩)

    题目链接:POJ 2777 Count Color [题目大意] 给你 n 块板子, 编号1--n , 板子的颜色最多30种, 初始时  板子的颜色都是 1: 有两种操作 1 .把给定区间的板子染成一 ...

  4. HDU 1698 Just a Hook (线段树区间修改+区间查询)

    题目链接: 传送门 题意:Pudge对装备钩子进行若干次的强化,强化分为三种分别对应的价值是1,2,3,在经历过若干次操作后,输出钩子对应的总价值,每次强化都是对钩子进行区间修改 解题思路:在明白了题 ...

  5. 1631 小鲨鱼在51nod小学(线段树区间修改+单点查询:不用下传lazy的区间修改)

    题目描述: 1631 小鲨鱼在51nod小学 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的特长,在班里担任了许多职务. 每一个职务都有一个起始时间A和结束时间B, ...

  6. codeforces:E2. Array and Segments (Hard version)【线段树 + 区间修改】

    分析 思路很简单 遍历每个作为最大值,然后区间不包含当前最大值的都可以减掉 easy version就可以这样暴力解决 然后求出最大差值 暴力解法 import sys input = sys.std ...

  7. UVa 11992 (线段树 区间修改) Fast Matrix Operations

    比较综合的一道题目. 二维的线段树,支持区间的add和set操作,然后询问子矩阵的sum,min,max 写完这道题也是醉醉哒,代码仓库里还有一份代码就是在query的过程中也pushdown向下传递 ...

  8. 【UOJ 53】线段树区间修改

    [题目描述]: 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 [输入描述]: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...

  9. tzoj3315 买火车票(线段树+区间修改+区间查询)

    时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte 描述 Byteotian州铁道部决定赶上时代,为此他们引进了城市联网.假设城市联网顺次连接着n 个市从1 ...

最新文章

  1. 缓存核心知识小抄,面试必备,赶紧收藏!
  2. 建议收藏!最新的(2019年)电子/计算机领域SCI期刊影响因子大全
  3. C++11中的右值引用及move语义编程
  4. 戴尔电脑开机黑屏怎么办_电脑黑屏开不了机怎么办
  5. windows10中安装anaconda和pytorch
  6. 如何通过Azure Service Management REST API管理Azure服务
  7. 统计信号处理基础-估计与检测理论的学习过程
  8. python打印朱莉娅集合
  9. 建行u盾弹不出来_建设银行网银盾检测不到怎么解决
  10. 微信 存储目录 计算机,电脑微信文件夹保存位置
  11. ASP连接Oracle数据库简易DEMO完全案例
  12. R语言使用sort函数对日期向量数据进行排序、默认从小到大升序排序、设置decreasing参数为真进行降序排序
  13. win7桌面上的计算机图标不见了怎么办,win7桌面图标不见了怎么办 五种解决方法分享...
  14. Centos7 配置163邮箱
  15. Openjudge:苹果和虫子
  16. linux g 使用教程,linux下的gedit命令使用方法与技巧
  17. PC上网页端屏蔽知乎上的视频
  18. 拼多多免单券怎么领取 拼多多免单券是真的吗
  19. 开源项目eladmin--笔记
  20. H.266/VVC代码学习32:VTM5.0解码端最上层函数

热门文章

  1. 腾讯地图获取所选区域坐标
  2. 第七章 Java基础类库
  3. 全国计算机等级考试-三级信息安全考试知识点(无顺序)
  4. 蝙蝠侠最新截图----光影的典型例证
  5. 十个全网最具创意的聊天机器人:漫威和联合国儿童基金会都在尝试使用聊天机器人...
  6. 通过slave_exec_mode=IDEMPOTENT跳过主从复制中的错误(1032 1062)
  7. 51cto mysql下载_安装Mysql服务_大神程序员养成之路-Mysql数据库基础_MySQL视频-51CTO学院...
  8. python爬虫-京东登录
  9. 常用github开源地址
  10. Win10多台电脑时间自动同步