博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HA2795Billboard 可用线段树
阅读量:4308 次
发布时间:2019-06-06

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

#include
using namespace std;#include
#include
#define maxn 200005int h,n,w;int root[maxn<<4];int ans;//标记void make_tree(int l,int r,int rt){ if(l==r) { root[rt]=w; return ; } int mid=(r+l)/2; make_tree(l,mid,rt*2); make_tree(mid+1,r,rt*2+1); root[rt]=max(root[rt*2],root[rt*2+1]);}void query(int b,int l,int r,int rt){ if(root[rt]
200000) h=200000; make_tree(1,h,1); while(n--) { int a; ans=-1; scanf("%d",&a); query(a,1,h,1); printf("%d\n",ans); } } return 0;}
View Code

 

第一眼又是坑长的英文,细看外加用了点灵格斯,题目大意是一个广告栏要加广告上去,输入广告栏的长(h)宽(w)和所加广告的个数n,然后n行依次输入n个数代表所加广告的宽(广告的长都是1),每一次加广告上去,都尽量把广告往左上位置放,每放一个广告输出它放在广告栏的第几行(长度),没有位置放则输出"-1"。

     用线段树,建树,每一个root[rt]=w,放广告就从左树先查找,长度从小到大,当满足root[rt]>n[i]能放广告时,记下left位置,并相应的减去x[i],输出left;不能放输出"-1"。

转载于:https://www.cnblogs.com/zlpzjy/p/3216313.html

你可能感兴趣的文章
设计模式03_工厂
查看>>
设计模式04_抽象工厂
查看>>
设计模式05_单例
查看>>
设计模式06_原型
查看>>
设计模式07_建造者
查看>>
设计模式08_适配器
查看>>
设计模式09_代理模式
查看>>
设计模式10_桥接
查看>>
设计模式11_装饰器
查看>>
设计模式12_外观模式
查看>>
设计模式13_享元模式
查看>>
设计模式14_组合结构
查看>>
设计模式15_模板
查看>>
海龟交易法则01_玩风险的交易者
查看>>
CTA策略02_boll
查看>>
vnpy通过jqdatasdk初始化实时数据及历史数据下载
查看>>
设计模式19_状态
查看>>
设计模式20_观察者
查看>>
vnpy学习10_常见坑02
查看>>
用时三个月,终于把所有的Python库全部整理了!拿去别客气!
查看>>