博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杭电1698--Just a Hook(线段树, 区间更新)
阅读量:5892 次
发布时间:2019-06-19

本文共 1468 字,大约阅读时间需要 4 分钟。

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1698

线段树, 区间更新, 用到了Lazy思想。利用已更新区间来减少未更新区间用时。(自己的理解, 应该是对的)

 

#include <cstdio>
#include <cstring>
#include <iostream>
using 
namespace std;
int Node[
100100<<
2], n, m, lazy[
100100<<
2];
void Pushup(
int root)
{
    Node[root] = Node[root<<
1] + Node[root<<
1|
1]; 
}
void Pushdown(
int l, 
int r, 
int root)
{
    
int mid = (l + r) >> 
1;
    Node[root<<
1] = (mid - l + 
1)*lazy[root];
    Node[root<<
1|
1] = (r - mid)*lazy[root];
    lazy[root<<
1] = lazy[root<<
1|
1] = lazy[root];
    lazy[root] = 
0;
}
void Build(
int l, 
int r, 
int root)
{
    lazy[root] = 
0;
    
if(l==r)
    {
        Node[root] = 
1;
        
return;
     }    
     
int mid = (l + r) >> 
1;
    Build(l, mid, root<<
1);
    Build(mid + 
1, r, root<<
1|
1);
    Pushup(root); 
void Update(
int x, 
int y, 
int val, 
int l, 
int r, 
int root)
{
    
if(x == l && y == r)
    {
        lazy[root] = val;
        Node[root] = val*(y-x+
1);
        
return;
    }    
    
if(lazy[root])
        Pushdown(l, r, root);
    
int mid = (l + r) >> 
1;
    
if(y <= mid)
        Update(x, y, val, l, mid, root<<
1);
    
else
        
if(x > mid)
            Update(x, y, val, mid + 
1, r, root<<
1|
1);
    
else
    {
        Update(x, mid, val, l, mid, root<<
1);
        Update(mid+
1, y, val, mid+
1, r, root<<
1|
1);
    }
    Pushup(root);
}
int main()
{
    
int T, temp = 
1;
    scanf(
"
%d
", &T); 
    
while(T--)
    {
        scanf(
"
%d%d
", &n, &m);
        Build(
1, n, 
1);
        
while(m--)
        {
            
int a, b, c;
            scanf(
"
%d%d%d
", &a, &b, &c);
            Update(a, b, c, 
1, n, 
1);
        }
        printf(
"
Case %d: The total value of the hook is %d.\n
", temp++, Node[
1]);
    }
    
return 
0;}

转载于:https://www.cnblogs.com/soTired/p/4776995.html

你可能感兴趣的文章
品尝阿里云容器服务:用nginx镜像创建容器,体验基于域名的路由机制
查看>>
PHP const关键字
查看>>
ssh 安装笔记
查看>>
游戏音效下载网站大全
查看>>
angular $resouse服务
查看>>
实验五
查看>>
文法分析
查看>>
记那次失败了的面试
查看>>
程序包+创建包规范+创建包体+删除程序包
查看>>
3-继承
查看>>
java中如何实现类似goto的作法
查看>>
海归千千万 为何再无钱学森
查看>>
vue2.0 仿手机新闻站(六)详情页制作
查看>>
FreeRTOS的内存管理
查看>>
JSP----九大内置对象
查看>>
The Z-Index CSS Property: A Comprehensive Look | Smashing Coding
查看>>
Java中HashMap详解
查看>>
Office版本差别引发的语法问题
查看>>
Apache——访问控制
查看>>
web前端(10)—— 浮动,清除默认样式
查看>>