【bzoj1568】【JSOI2008】【Blue Mary开公司】【线段树】
发布日期:2021-11-16 15:38:47
浏览次数:5
分类:技术文章
本文共 2170 字,大约阅读时间需要 7 分钟。
Description
Input
第一行 :一个整数N ,表示方案和询问的总数。 接下来N行,每行开头一个单词“Query”或“Project”。 若单词为Query,则后接一个整数T,表示Blue Mary询问第T天的最大收益。 若单词为Project,则后接两个实数S,P,表示该种设计方案第一天的收益S,以及以后每天比上一天多出的收益P。
Output
对于每一个Query,输出一个整数,表示询问的答案,并精确到整百元(以百元为单位,例如:该天最大收益为210或290时,均应该输出2)。
Sample Input
10
Project 5.10200 0.65000
Project 2.76200 1.43000
Query 4
Query 2
Project 3.80200 1.17000
Query 2
Query 3
Query 1
Project 4.58200 0.91000
Project 5.36200 0.39000
Project 5.10200 0.65000
Project 2.76200 1.43000
Query 4
Query 2
Project 3.80200 1.17000
Query 2
Query 3
Query 1
Project 4.58200 0.91000
Project 5.36200 0.39000
Sample Output
0
0
0
0
0
0
0
0
0
HINT
约定: 1 <= N <= 100000 1 <= T <=50000 0 < P < 100,| S | <= 10^6 提示:本题读写数据量可能相当巨大,请选手注意选择高效的文件读写方式。
题解:同bzoj3165
#include#include #include #include #define N 500000#define P 500010#define MOD 1000000000#define eps 1e-10using namespace std;int t[P<<2],ansa,n,xx,kind,top,a[P],lastans;double b[P],ansb,x,y,x2,y2,p,q;char ch[10];struct use{ double k,b; int l,r; double f(int x){return k*x+b;}}line[N];int cross(use a,use b){ return floor((b.b-a.b)/(a.k-b.k));}use cal(double x,double y,double x2,double y2){ use ans; ans.r=max(x,x2);ans.l=min(x,x2); if (x2!=x) ans.k=(y2-y)/(x2-x),ans.b=y-ans.k*x; else ans.k=0.0,ans.b=max(y,y2); return ans;}int check(double x){ return (x>-eps)-(x 0||(ff==0&&k 0; int fr=check(line[x].f(r)-line[t[k]].f(r))>0; if (fl&&fr) t[k]=x; else if(fl||fr){ int mid=(l+r)>>1; int p=cross(line[x],line[t[k]]); if (p<=mid&&fl) insert(k<<1,l,mid,x); if (p<=mid&&fr) insert(k<<1,l,mid,t[k]),t[k]=x; if (p>mid&&fl) insert(k<<1|1,mid+1,r,t[k]),t[k]=x; if (p>mid&&fr) insert(k<<1|1,mid+1,r,x); } else up(x,l),up(x,r); } return; } int mid=(l+r)>>1; if (line[x].l<=mid) insert(k<<1,l,mid,x); if (line[x].r>mid) insert(k<<1|1,mid+1,r,x);}void query(int k,int l,int r,int x){ if (t[k]){ double tt=line[t[k]].f(x); int ff=check(tt-ansb); if ((ff>0||(ff==0&&ansa >1; if (x<=mid) query(k<<1,l,mid,x); else query(k<<1|1,mid+1,r,x); }int main(){ scanf("%d",&n); for (int i=1;i<=n;i++){ scanf("%s",ch); if (ch[0]=='P'){ scanf("%lf%lf",&p,&q); x=1;y=p;x2=P;y2=y+(P-1)*q; line[++top]=cal(x,y,x2,y2); insert(1,1,P,top); } else{ scanf("%d",&xx);ansa=0;ansb=-1.0; query(1,1,P,xx); int ff=check(b[xx]-ansb); if ((ff>0||(ff==0&&a[xx]
转载地址:https://blog.csdn.net/sunshinezff/article/details/51129906 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月06日 18时15分57秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Android的.dex、.odex与.oat文件扫盲
2019-04-27
Unity移动应用如何在Bugly上查看崩溃堆栈
2019-04-27
一分钟搞明白Android的.so文件、ABI和CPU的关系
2019-04-27
UGUI的Text描边Outline拓展
2019-04-27
游戏性能指标参考,游戏质量白皮书下载
2019-04-27
游戏帧同步学习笔记
2019-04-27
Mac苹果电脑分辨率不够用,安装SwitchResX这个软件完美解决
2019-04-27
iOS Info.plist知多少
2019-04-27
XCode9之后命令打包需要使用OptionExport.plist
2019-04-27
关于iOS XCode的entitlements文件
2019-04-27
Airtest自动化测试神器,教你实现Unity自动化测试
2019-04-27
模拟器连接端口汇总和常用ADB命令
2019-04-27
ShaderGraph使用教程与各种特效案例:Unity2020(持续更新)
2019-04-27
Unity爆炸、闪电、火焰、雷雨特效Demo
2019-04-27
使用python登录和访问Confluence
2019-04-27
Unity2020中使用MemoryProfile卡死和报错的问题
2019-04-27