hdu 1698 Just a Hook_线段树
题意:给你个n,表示区间【1,n】,价值初始为1,给你m段区间和价值,更新区间,区间价值以最后更新为准,问更新后区间价值总和为多少
思路:两种方法,可以先存下来,倒过来更新,一更新节点马上跳出,比较快
线段树
#include <iostream> using namespace std; int data[100005][3]; int main()
{
int t,q,n,i,j,sum,k,v;
scanf("%d",&t);
for(i=1;i<=t;i++)
{
scanf("%d%d",&n,&q);
for(j=1;j<=q;j++)
scanf("%d%d%d",&data[j][0],&data[j][1],&data[j][2]);
sum=0;
for(k=1;k<=n;k++)
{
v=1;
for(j=q;j>=1;j--)
if(data[j][0]<=k && k<=data[j][1])//寻找k所在的更新区间,若存在则更新
{
v=data[j][2]; //若找的最后面的更新区间,则停止
break;
}
sum+=v;
}
printf("Case %d: The total value of the hook is %d.\n",i,sum);
}
return 0;
}
#include <iostream>
#include<cstdio>
using namespace std;
#define N 300010
struct node{
int value;
int l,r;
}tree[N];
void Build(int l,int r,int id){
tree[id].l=l;
tree[id].r=r;
tree[id].value=1;
if(l!=r){
int mid=(l+r)>>1;
Build(l,mid,id<<1);
Build(mid+1,r,id<<1|1);
}
}
void update(int l,int r,int value,int id){
int mid=(tree[id].l+tree[id].r)>>1;
if(tree[id].l==l&&tree[id].r==r){
tree[id].value=value;
return;
}
if(tree[id].value==value)
return;
if(tree[id].value!=-1){
tree[id<<1].value=tree[id<<1|1].value=tree[id].value;
tree[id].value=-1;
}
if(r<=mid)
update(l,r,value,id<<1);
else if(l>mid)
update(l,r,value,id<<1|1);
else{
update(l,mid,value,id<<1);
update(mid+1,r,value,id<<1|1);
}
}
int query(int id){
if(tree[id].value!=-1)
return (tree[id].r-tree[id].l+1)*tree[id].value;
return query(id<<1)+query(id<<1|1);
}
int main(int argc, char** argv) {
int t,n,m,x,y,k,Cas=1;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
Build(1,n,1);
scanf("%d",&m);
while(m--){
scanf("%d%d%d",&x,&y,&k);
update(x,y,k,1);
}
printf("Case %d: The total value of the hook is %d.\n",Cas++,query(1)); }
return 0;
}
hdu 1698 Just a Hook_线段树的更多相关文章
- HDU 1698 just a hook 线段树,区间定值,求和
Just a Hook Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1 ...
- HDU 1698 Just a Hook(线段树 区间替换)
Just a Hook [题目链接]Just a Hook [题目类型]线段树 区间替换 &题解: 线段树 区间替换 和区间求和 模板题 只不过不需要查询 题里只问了全部区间的和,所以seg[ ...
- HDU 1698 Just a Hook(线段树成段更新)
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 1698 Just a Hook (线段树 成段更新 lazy-tag思想)
题目链接 题意: n个挂钩,q次询问,每个挂钩可能的值为1 2 3, 初始值为1,每次询问 把从x到Y区间内的值改变为z.求最后的总的值. 分析:用val记录这一个区间的值,val == -1表示这 ...
- [HDU] 1698 Just a Hook [线段树区间替换]
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- (简单) 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 线段树+lazy-target 区间刷新
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- 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 ...
- HDU 1698 Just a Hook(线段树区间替换)
题目地址:pid=1698">HDU 1698 区间替换裸题.相同利用lazy延迟标记数组,这里仅仅是当lazy下放的时候把以下的lazy也所有改成lazy就好了. 代码例如以下: # ...
随机推荐
- Linux远程桌面
发现windows下有个VNC viewer.据说是跨平台的. sudo apt-cache search VNC | grep VNC了一下.发现有一个gvncviewer的包,然后apt-get ...
- Randomized QuickSelect
In this blog, we give a solution for Quick Select. Here, we have an improvement. The idea is to rand ...
- UVA 11045-My T-shirt suits me(二分图匹配)
题意:有N件T恤,N是6的倍数,因为有6种型号,每种件数相同,有M个人,每个人有两种型号的T恤适合他,每个人可以挑其中的一种,问能否所有的人都能分配到T恤. 解析:典型的二分图匹配,每N/6为同种T恤 ...
- Debug of bash , perl and python
1.bash -x script 2.perl -d script 3. python -m pdb script n: execute the next line s: execute the ...
- JNI与JNA性能比较
JNI与JNA性能比较 在介绍JNA时,提到了JNA是基于JNI的,是在JNI上封装了一层,JNI性能不如JNA.最近在网上看到篇简单的比较这两者性能的文档,感觉不错,现转载一下: 分别用JNI和JN ...
- 谋哥:研究App排行榜浮出的神器
昨天发的<App排行榜的秘密>到头条网,阅读量到2万,踩的比顶的多几倍.原因是由于我使用360市场的数据来分析,而且这帮喷子根本不看你分析数据背后的意义,反正看到自己不喜欢的比方" ...
- Codevs1992题解
题目大意 求有向图中经过某一点k的最大环(数据规模不支持floyd). 题解 以k为起点在正向图中spfa求单源最短路.再在反向图中spfa求单源最短路. 枚举除k外的每个点i.假设有一个同一时候包括 ...
- UGUI实现的虚拟摇杆,可改变摇杆位置
实现方式主要参考这篇文章:http://www.cnblogs.com/plateFace/p/4687896.html. 主要代码如下: using UnityEngine; using Syste ...
- Eclipse - JAR包制作细节
Eclipse - JAR包制作细节 1.Jar包分为两种,一种是不可运行的,一种是可运行的Jar包,他们的主要区别如下: > 不可直接运行的Jar包主要是用于给别的程序提供调用 ...
- NET基础课--配置文件2
1. 使用<appSettings> 简单的配置信息,可以直接放入<appSettings>标记中.如: <?xml version="1.0& ...