HDU1698Just a Hook(线段树 + 区间修改 + 求和)
分析:1-N区间内初始都是1,然后q个询问,每个询问修改区间【a,b】的值为2或3或者1,统计最后整个区间的和
本来想刷刷手速,结果还是写了一个小时,第一个超时,因为输出的时候去每个区间查找了,直接输出tree[1].value就可以了 =_=
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdio>
using namespace std;
const int Max = ;
int hook[Max + ];
struct node
{
int l,r;
int value;
int tag;
};
node tree[ * Max];
void buildTree(int left, int right, int k)
{
tree[k].l = left;
tree[k].r = right;
tree[k].tag = -;
if(left == right)
{
tree[k].value = ;
return;
}
int mid = (left + right ) / ;
buildTree(left, mid, k * );
buildTree(mid + , right, k * + );
tree[k].value = tree[k * ].value + tree[k * + ].value;
}
void upDate(int left, int right, int k, int newp)
{
if(tree[k].l ==left && tree[k].r == right)
{
tree[k].value = (right - left + ) * newp;
tree[k].tag = newp;
return;
}
if(tree[k].tag != -)
{
tree[k * ].tag = tree[k * + ].tag = tree[k].tag;
tree[k * ].value = (tree[k * ].r - tree[k * ].l + ) * tree[k].tag;
tree[k * + ].value = (tree[k * + ].r - tree[k * + ].l + ) * tree[k].tag;
tree[k].tag = -;
}
int mid = (tree[k].l + tree[k].r) / ;
if(right <= mid)
{
upDate(left, right, k * , newp);
}
else if(mid < left)
{
upDate(left, right, k * + , newp);
}
else
{
upDate(left, mid, k * , newp);
upDate(mid + , right, k * + , newp);
}
tree[k].value = tree[k * ].value + tree[k * + ].value;
}
int Search(int k)
{
if(tree[k].tag != -)
{
tree[k * ].tag = tree[k * + ].tag = tree[k].tag;
tree[k * ].value = (tree[k * ].r - tree[k * ].l + ) * tree[k].tag;
tree[k * + ].value = (tree[k * + ].r - tree[k * + ].l + ) * tree[k].tag;
tree[k].tag = -;
}
if(tree[k].l == tree[k].r)
return tree[k].value;
return Search(k * ) + Search(k * + );
}
int main()
{
int test,n;
scanf("%d", &test);
for(int t = ; t <= test; t++)
{
int q,a,b,newp;
scanf("%d", &n);
buildTree(, n, );
scanf("%d", &q);
for(int i = ; i <= q; i++)
{
scanf("%d%d%d", &a, &b, &newp);
upDate(a, b, , newp);
}
printf("Case %d: The total value of the hook is %d.\n", t, tree[].value);
}
return ;
}
HDU1698Just a Hook(线段树 + 区间修改 + 求和)的更多相关文章
- 题解报告:hdu 1698 Just a Hook(线段树区间修改+lazy懒标记的运用)
Problem Description In the game of DotA, Pudge’s meat hook is actually the most horrible thing for m ...
- Codeforces Round #442 (Div. 2) E Danil and a Part-time Job (dfs序加上一个线段树区间修改查询)
题意: 给出一个具有N个点的树,现在给出两种操作: 1.get x,表示询问以x作为根的子树中,1的个数. 2.pow x,表示将以x作为根的子树全部翻转(0变1,1变0). 思路:dfs序加上一个线 ...
- HDU.1689 Just a Hook (线段树 区间替换 区间总和)
HDU.1689 Just a Hook (线段树 区间替换 区间总和) 题意分析 一开始叶子节点均为1,操作为将[L,R]区间全部替换成C,求总区间[1,N]和 线段树维护区间和 . 建树的时候初始 ...
- poj 2528 线段树区间修改+离散化
Mayor's posters POJ 2528 传送门 线段树区间修改加离散化 #include <cstdio> #include <iostream> #include ...
- E - Just a Hook HDU - 1698 线段树区间修改区间和模版题
题意 给出一段初始化全为1的区间 后面可以一段一段更改成 1 或 2 或3 问最后整段区间的和是多少 思路:标准线段树区间和模版题 #include<cstdio> #include& ...
- HDU 1698 Just a Hook(线段树 区间替换)
Just a Hook [题目链接]Just a Hook [题目类型]线段树 区间替换 &题解: 线段树 区间替换 和区间求和 模板题 只不过不需要查询 题里只问了全部区间的和,所以seg[ ...
- HDU 1698 线段树 区间更新求和
一开始这条链子全都是1 #include<stdio.h> #include<string.h> #include<algorithm> #include<m ...
- (简单) HDU 1698 Just a Hook , 线段树+区间更新。
Description: In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of ...
- HDU 1698 Just a Hook(线段树区间更新查询)
描述 In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes ...
随机推荐
- Ext.Net-Grid 篇
概述 前两篇分别介绍了Ext.NET-基础 和 Ext.NET-布局,从本篇开始我们尽量做一些实际工作中用到的例子. 在Ext.NET官方示例中,关于GridPanel的例子是最多的(近百个),篇幅所 ...
- Bash on Windows 抢鲜测试 -- 介绍及安装
前言 微软在上周的Windows BUILD大会上宣布,WIN10将引入原生Bash,并将很快在技术预览版中推出. 如此一来,windows的命令行工具就不再只有cmd和powershell了,我们可 ...
- foreach 和 for 循环的区别
foreach 依赖 IEnumerable. 第一次 var a in GetList() 时 调用 GetEnumerator 返回第一个对象 并 赋给a, 以后每次再执行 var a in Ge ...
- BroadcastReceiver之(手动代码注册广播)屏幕锁屏、解锁监听、开机自启
对于解锁和锁屏这种用的比较频繁action,谷歌做了限制,必须手动用代码注册 直接上代码:这是注册广播(手动代码注册广播接收者) public class MainActivity extends A ...
- vs2012 发布网站,
如图这样选择就没有可以得到一个不包括 *.aspx.cs 的网站了.
- ClipDrawable 实现图片渐变现实
clip.xml <?xml version="1.0" encoding="utf-8"?><clip xmlns:android=&quo ...
- Android点击EditText文本框之外任何地方隐藏键盘的解决办法
1,实现方法一:通过给当前界面布局文件的父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里进行键盘隐藏 <LinearLayout xmlns:android=&q ...
- [转]Spring3 MVC + jQuery easyUI 做的ajax版本用户管理
原文地址:http://www.iteye.com/topic/1081739 上周写了篇基于spring3.0.5 mvc 简单用户管理实例 ( http://www.iteye.com/topic ...
- 9.29判断变量x是奇数还是偶数
方法一: package qqq; public class Jiou { public static void main(String[] args) { // TODO Auto-generate ...
- 【BZOJ 4515】【SDOI 2016 Round1 Day1 T3】游戏
考场上写了lct,可惜当时对标记永久化的理解并不是十分深刻,导致调一个错误的程序调了4h+,最后这道题爆0了QwQ 现在写了树链剖分,用标记永久化的线段树维护轻重链,对于$s\rightarrow l ...