分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

bzoj千题计划219:bzoj1568: [JSOI2008]Blue Mary开公司

发布时间:2023-09-06 01:40责任编辑:胡小海关键词:暂无标签

http://www.lydsy.com/JudgeOnline/problem.php?id=1568

写多了就觉着水了。。。

#include<cstdio>#include<iostream>#include<algorithm>using namespace std;#define N 100001double a[N<<2],b[N<<2];bool have[N<<2];long long ans;void read(int &x){ ???x=0; char c=getchar(); ???while(!isdigit(c)) c=getchar(); ???while(isdigit(c)) { x=x*10+c-‘0‘; c=getchar(); } }void change(int k,int l,int r,double A,double B){ ???if(!have[k]) ???{ ???????have[k]=true; ???????a[k]=A; ???????b[k]=B; ???????return; ???} ???if(l==r) ???{ ???????a[k]=max(a[k],A); ???????return; ???} ???else ???{ ???????if(A>a[k]+(r-l)*b[k]) ???????{ ???????????a[k]=A; ???????????b[k]=B; ???????????return; ???????} ???????if(a[k]>A+(r-l)*B) return; ???????int mid=l+r>>1; ???????if(A<a[k]) ???????{ ????????????if(A+(mid-l)*B>a[k]+(mid-l)*b[k]) ???????????{ ???????????????change(k<<1,l,mid,a[k],b[k]); ???????????????a[k]=A; ???????????????b[k]=B; ???????????} ???????????else change(k<<1|1,mid+1,r,A+(mid+1-l)*B,B); ???????} ???????else ???????{ ???????????if(A+(mid-l)*B>a[k]+(mid-l)*b[k]) ???????????{ ???????????????change(k<<1|1,mid+1,r,a[k]+(mid+1-l)*b[k],b[k]); ???????????????a[k]=A; ???????????????b[k]=B; ???????????} ???????????else change(k<<1,l,mid,A,B); ???????} ???????}}void query(int k,int l,int r,int p){ ???if(!have[k]) return; ???if(l==r) ???{ ???????ans=max(ans,(long long)a[k]); ???????return; ???} ???ans=max(ans,(long long)(a[k]+(p-l)*b[k])); ???int mid=l+r>>1; ???if(p<=mid) query(k<<1,l,mid,p); ???else query(k<<1|1,mid+1,r,p);}int main(){ ???int n,x; ???char c[8]; ???double s,p; ???read(n); ???while(n--) ???{ ????????scanf("%s",c); ????????if(c[0]==‘Q‘) ????????{ ????????????read(x); ????????????ans=0; ????????????query(1,1,N-1,x); ????????????cout<<ans/100<<‘\n‘; ????????} ????????else ????????{ ????????????scanf("%lf%lf",&s,&p); ????????????change(1,1,N-1,s,p); ????????} ???}}

1568: [JSOI2008]Blue Mary开公司

Time Limit: 15 Sec  Memory Limit: 162 MB
Submit: 1706  Solved: 593
[Submit][Status][Discuss]

Description

Input

第一行 :一个整数N ,表示方案和询问的总数。 
接下来N行,每行开头一个单词“Query”或“Project”。 
若单词为Query,则后接一个整数T,表示Blue Mary询问第T天的最大收益。 
若单词为Project,则后接两个实数S,P,表示该种设计方案第一天的收益S,以及以后每天比上一天多出的收益P。
1 <= N <= 100000 1 <= T <=50000 0 < P < 100,| S | <= 10^6 
提示:本题读写数据量可能相当巨大,请选手注意选择高效的文件读写方式。

Output

对于每一个Query,输出一个整数,表示询问的答案,并精确到整百元(以百元为单位,
例如:该天最大收益为210或290时,均应该输出2)。没有方案时回答询问要输出0

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

Sample Output

0
0
0
0
0

bzoj千题计划219:bzoj1568: [JSOI2008]Blue Mary开公司

原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/8393189.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved