题意:

  有编号为0~n的n+1个房屋,给出每个房屋的起始价格,随后给出m种修改,每次修改都要进行输出所有房屋的价格总和。修改有两种方式:(1)政府调控,编号L~R全置为同一价格(0)房屋自行涨跌,编号L~R的房屋价格全部涨/跌一部分。

思路:

  只需要一个tag+浮动的价格就可以解决这个问题了。当tag=1时,表示需要对该节点的孩子进行修改。进行何种修改?看浮动价格flo是否为0,若为0,表示需要设置为同一价格,否则,表示价格需要涨跌。当先进行set后进行add时,按照set的方式下放即可;当先进行add后进行set时,set直接覆盖掉add,依然按照set的方式下放即可。

不知道错在哪

 #include <bits/stdc++.h>
using namespace std;
int n, m, e, l, r, d, v;
bool flag;
struct node
{
int sum; //总和
int flo; //浮动价格
bool tag; //lazy tag
node *ll,*rr;
}; node *create()
{
node *tmp=new(node);
tmp->sum=tmp->flo=tmp->tag=;
tmp->ll=tmp->rr=;
return tmp;
} node * create_tree(int LL,int RR)
{
node *tmp=create();
if(LL==RR) //没有必要设置lazy tag
{
int a;
cin>>a;
tmp->sum=a;
return tmp;
}
int mid=((LL+RR)>>);
tmp->ll= create_tree(LL,mid);
tmp->rr= create_tree(mid+,RR);
tmp->sum= tmp->ll->sum + tmp->rr->sum;
return tmp;
} int dfs(const int ll,const int rr,const int LL,const int RR,const int val,node *t)
{
if(ll==LL&&rr==RR)
{
t->tag=;
if(flag==) //政府调控
{
t->flo=;
t->sum=(RR-LL+)*val;
}
else //自发涨价
{
t->flo=val;
t->sum+=(RR-LL+)*val;
}
return t->sum;
} int mid=(LL+RR)/;
if(t->tag) //下放
{
t->tag=;
t->ll->tag= t->rr->tag= ;
if(t->flo==)//政府调控
{
t->ll->flo= t->rr->flo= ;
t->ll->sum= t->sum/(RR-LL+)*(mid-LL+);
t->rr->sum= t->sum - t->ll->sum;
}
else //需要改浮动价格的
{
t->ll->flo= t->rr->flo= t->flo;
t->ll->sum+= (mid-LL+)* t->flo;
t->rr->sum+= (RR-mid)* t->flo;
}
} if(ll>mid)
t->sum= t->ll->sum + dfs(ll,rr,mid+,RR,val,t->rr);
else if(rr<=mid)
t->sum= t->rr->sum + dfs(ll,rr,LL,mid,val,t->ll);
else
t->sum=dfs(ll,mid,LL,mid,val,t->ll) + dfs(mid+,rr,mid+,RR,val,t->rr);
return t->sum;
} int main()
{
//freopen("input.txt", "r", stdin);
cin>>n>>m;
node *tree=create_tree(,n+); //建树
for(int i=; i<m; i++) //修改并输出
{
scanf("%d",&e);
if(e)
{
flag=;
scanf("%d%d%d",&l,&r,&v);
printf("%d\n",dfs(l+, r+, , n+, v, tree));
}
else
{
flag=;
scanf("%d%d%d",&l,&r,&d);
printf("%d\n",dfs(l+, r+, , n+, d, tree));
}
}
return ;
}

WA代码

hihoCoder #1080 : 更为复杂的买卖房屋姿势 (线段树,多tag)的更多相关文章

  1. hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新

    #1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...

  2. hiho#1080 更为复杂的买卖房屋姿势 线段树+区间更新

    #1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...

  3. HihoCoder1080 更为复杂的买卖房屋姿势(线段树+多重lazy)

    描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们可以化身上帝模式,买卖房产. 在这个游戏里,会不断的发生如下两种事件:一种是房屋自发的涨价或者降价,而另一种是政 ...

  4. hiho1080 更为复杂的买卖房屋姿势

    题目链接: hihocoder1080 题解思路: 题目中对区间改动有两个操作: 0   区间全部点添加v 1   区间全部点改为v easy想到应该使用到两个懒惰标记  一个记录替换  一个记录增减 ...

  5. hihocoder1080 更为复杂的买卖房屋姿势

    思路: 线段树区间修改,需要使用两个懒标记set和add.处理好两个标记的优先级即可(set之前的set和add是没有作用的). 实现: #include <bits/stdc++.h> ...

  6. hihocoder #1034 : 毁灭者问题 平衡树(set)+线段树

    #1034 : 毁灭者问题 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在 Warcraft III 之冰封王座中,毁灭者是不死族打三本后期时的一个魔法飞行单位. 毁 ...

  7. hihocoder 1080 线段树(区间更新)

    题目链接:http://hihocoder.com/problemset/problem/1080 , 两种操作的线段树(区间更新). 这道题前一段时间一直卡着我,当时也是基础不扎实做不出来,今天又想 ...

  8. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  9. codevs 1080 线段树练习

    链接:http://codevs.cn/problem/1080/ 先用树状数组水一发,再用线段树水一发 树状数组代码:84ms #include<cstdio> #include< ...

随机推荐

  1. StarUML中时序图

    StarUML中时序图 在看时序图的例子的时候,发现有些的时序图上有小人的图标,可是一些UML工具却没有找到小人的图标,这让我很闹心,一直没解决,今天终于将该问题给解决了.解决这个问题来自于网上的一个 ...

  2. 12_tcp_ip相关概念

    java基础班  网络编程应该提过.大学学计算机或者是通信的对这些东西肯定比较熟一些.主机到网络层是跟硬件相关的一些协议了.上层协议得依赖下层的协议.也就是说它们得联合起来共同工作才能够把数据传输出去 ...

  3. lua中文教程【高级知识】

    一.编译和运行和调试 1.lua和其他解释型语言一样,先转换成为中间码再执行 2.dofile和loadfile的区别:loadfile编译返回不执行,返回错误代码:dofile执行,返回错误信息 3 ...

  4. 洛谷 - P3768 - 简单的数学题 - 欧拉函数 - 莫比乌斯反演

    https://www.luogu.org/problemnew/show/P3768 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}ijgcd(i ...

  5. 算法学习--Day6

    题目描述 实现一个加法器,使其能够输出a+b的值. 输入描述: 输入包括两个数a和b,其中a和b的位数不超过1000位. 输出描述: 可能有多组测试数据,对于每组数据, 输出a+b的值. 示例1 输入 ...

  6. Multi-University板块

    力争补完所有 Multi-University 的"水题",任重而道远. HDU2819[二分匹配与矩阵性质] HDU2844[背包问题(二进制优化)] HDU2824[欧拉函数] ...

  7. perl C/C++ 扩展(三)

    第三讲扩展库使用c++实现,在调用函数后,返回对象变量,perl 能正确使用所有对象成员 使用h2xs 命令生成初始文件 h2xs -A -n three_test 登录目录 cd three_tes ...

  8. 关于maven+springmvc+mybits搭建的框架clean,build后错误:org.apache.ibatis.binding.BindingException的处理

    1.错误原型截图: 2.我对错误的处理轨迹: a.首先,可能是我的mapper.xml配置错了,但是经过查看发现mybits.xml配置如下: 我项目的目录结构如下: 初次判断mybits的配置没有问 ...

  9. python操作redis之String操作

    # __author__ = 'STEVEN' import redis,time # 方式1,直接链接操作 # r = redis.Redis(host='192.168.43.22',port=6 ...

  10. iOS蓝牙传输数据演示-3

    蓝牙传输数据演示 在上一小节中,我们一起开发了基于蓝牙通讯的工具类,该类中详细的实现蓝牙连接流程中的每一个环节 本小节我们就以给小米手环发送数据使其震动来演示我们工具类的用法 工具类本身具有通用性,属 ...