hihoCoder #1080 : 更为复杂的买卖房屋姿势 (线段树,多tag)
题意:
有编号为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)的更多相关文章
- hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新
#1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...
- hiho#1080 更为复杂的买卖房屋姿势 线段树+区间更新
#1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...
- HihoCoder1080 更为复杂的买卖房屋姿势(线段树+多重lazy)
描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们可以化身上帝模式,买卖房产. 在这个游戏里,会不断的发生如下两种事件:一种是房屋自发的涨价或者降价,而另一种是政 ...
- hiho1080 更为复杂的买卖房屋姿势
题目链接: hihocoder1080 题解思路: 题目中对区间改动有两个操作: 0 区间全部点添加v 1 区间全部点改为v easy想到应该使用到两个懒惰标记 一个记录替换 一个记录增减 ...
- hihocoder1080 更为复杂的买卖房屋姿势
思路: 线段树区间修改,需要使用两个懒标记set和add.处理好两个标记的优先级即可(set之前的set和add是没有作用的). 实现: #include <bits/stdc++.h> ...
- hihocoder #1034 : 毁灭者问题 平衡树(set)+线段树
#1034 : 毁灭者问题 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在 Warcraft III 之冰封王座中,毁灭者是不死族打三本后期时的一个魔法飞行单位. 毁 ...
- hihocoder 1080 线段树(区间更新)
题目链接:http://hihocoder.com/problemset/problem/1080 , 两种操作的线段树(区间更新). 这道题前一段时间一直卡着我,当时也是基础不扎实做不出来,今天又想 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1080 线段树练习
链接:http://codevs.cn/problem/1080/ 先用树状数组水一发,再用线段树水一发 树状数组代码:84ms #include<cstdio> #include< ...
随机推荐
- java 内存管理机制
垃圾收集算法 1.标记清理算法:效率不高(标记和清理过程效率都不高).会形成内存碎片 2.复制算法:把内存分为两部分,当进行回收时,把使用部分的存活对象复制到未使用部分,然后两部分内存角色互换(一个为 ...
- Android开发--AndroidManifest.xml文件解析
参考文章:http://www.cnblogs.com/pilang/archive/2011/04/20/2022932.html 一.关于AndroidManifest.xml AndroidMa ...
- jq之鼠标事件
以防自己忘记,最重要的是hover效果的 鼠标事件是在用户移动鼠标光标或者使用任意鼠标键点击时触发的. (1):click事件:click事件于用户在元素敲击鼠标左键,并在相同元素上松开左键时触发 ...
- Subsets Forming Perfect Squares
题意: 给出n个数字,选出若干个数字,使得这些数字的乘积是一个完全平方数,问有多少种选法. 解法: 考虑异或方程组,$x_i$表示第i个数字是否选, 注意到只要保证结果中各个质因数都出现偶数次就可保证 ...
- SourceTree切换语言
点击ok,重启SourceTree即生效 over!over!over!
- 51nod1086(多重背包&二進制)
題目鏈接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1086 題意:中文題誒- 思路:很顯然這是一道多重背包題,不過這 ...
- [Xcode 实际操作]九、实用进阶-(27)字符串文件(Localizable.strings)的本地化
目录:[Swift]Xcode实际操作 本文将演示字符串文件(Localizable.strings)的本地化. 在项目[DemoApp]文件夹下点击鼠标右键,弹出右键菜单 ->[New Fil ...
- 【OpenJ_Bailian - 4110】圣诞老人的礼物-Santa Clau’s Gifts (贪心)
圣诞老人的礼物-Santa Clau’s Gifts Descriptions: 圣诞节来临了,在城市A中圣诞老人准备分发糖果,现在有多箱不同的糖果,每箱糖果有自己的价值和重量,每箱糖果都可以拆分成 ...
- sql server 2012 导出sql文件
导出表数据和表结构sql文件 在工作中,经常需要导出某个数据库中,某些表数据:或者,需要对某个表的结构,数据进行修改的时候,就需要在数据库中导出表的sql结构,包括该表的建表语句和数据存储语句!在这个 ...
- mysql 配置大小写敏感后不能重启
[问题现象] 在mysql的配置文件my.cnf配置lower_case_table_names=1后不能重启mysql,提示mysql.serviceJob for mysql.service fa ...