bzoj1568 [JSOI2008]Blue Mary开公司 标记永久化线段树
2018-03-03 14:12
567 查看
维护n条直线,保存斜率和截距。
注意维护的时候分类讨论:
1、两端都大于
2、两端都小于
3、交点在中点左
4、交点在中点右
注:
点数不是询问数
初值
码:#include<iostream>
#include<cstdio>
using namespace std;
#define N 100005
double k[N<<2],ans,b[N<<2],K,B;
long long t;
int n,m,i,j;
char ch[55];
void gai(int o,double l,double r)
{
if((k[o]==0&&b[o]==0)||(k[o]*l+b[o]<=K*l+B&&k[o]*r+b[o]<=K*r+B))
{
k[o]=K;
b[o]=B;
return ;
}
if(k[o]*l+b[o]>=K*l+B&&k[o]*r+b[o]>=K*r+B)
{
return ;
}
int mid=(l+r)/2;
double jd=(B-b[o])/(k[o]-K);
if(jd<=mid)
{gai(o<<1,l,mid);
if(k[o]*r+b[o]<=K*r+B)gai(o<<1|1,mid+1,r);
}
if(jd>mid)
{gai(o<<1|1,mid+1,r);
if(k[o]*l+b[o]<=K*l+B)gai(o<<1,l,mid);
}
}
void cha(int o,double l,double r)
{ ans=max(k[o]*t+b[o],ans);
if(l==r)
{
return ;
}
int mid=(l+r)/2;
if(t<=mid)cha(o<<1,l,mid);
else cha(o<<1|1,mid+1,r);
}
int main()
{
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%s",ch);
if(ch[0]=='P')
{
scanf("%lf%lf",&B,&K);
B-=K;
gai(1,1,100000);
}else
{
ans=-9999999999;
scanf("%lld",&t);
cha(1,1,100000);
long long daan=ans/100;
printf("%lld\n",daan);
}
}
}
注意维护的时候分类讨论:
1、两端都大于
2、两端都小于
3、交点在中点左
4、交点在中点右
注:
点数不是询问数
初值
码:#include<iostream>
#include<cstdio>
using namespace std;
#define N 100005
double k[N<<2],ans,b[N<<2],K,B;
long long t;
int n,m,i,j;
char ch[55];
void gai(int o,double l,double r)
{
if((k[o]==0&&b[o]==0)||(k[o]*l+b[o]<=K*l+B&&k[o]*r+b[o]<=K*r+B))
{
k[o]=K;
b[o]=B;
return ;
}
if(k[o]*l+b[o]>=K*l+B&&k[o]*r+b[o]>=K*r+B)
{
return ;
}
int mid=(l+r)/2;
double jd=(B-b[o])/(k[o]-K);
if(jd<=mid)
{gai(o<<1,l,mid);
if(k[o]*r+b[o]<=K*r+B)gai(o<<1|1,mid+1,r);
}
if(jd>mid)
{gai(o<<1|1,mid+1,r);
if(k[o]*l+b[o]<=K*l+B)gai(o<<1,l,mid);
}
}
void cha(int o,double l,double r)
{ ans=max(k[o]*t+b[o],ans);
if(l==r)
{
return ;
}
int mid=(l+r)/2;
if(t<=mid)cha(o<<1,l,mid);
else cha(o<<1|1,mid+1,r);
}
int main()
{
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%s",ch);
if(ch[0]=='P')
{
scanf("%lf%lf",&B,&K);
B-=K;
gai(1,1,100000);
}else
{
ans=-9999999999;
scanf("%lld",&t);
cha(1,1,100000);
long long daan=ans/100;
printf("%lld\n",daan);
}
}
}
相关文章推荐
- BZOJ 1568: [JSOI2008]Blue Mary开公司 标记永久化
- 【bzoj1568】【JSOI2008】【Blue Mary开公司】【线段树】
- 【李超线段树】BZOJ1568[JSOI2008]Blue Mary开公司
- 【BZOJ1568】[JSOI2008]Blue Mary开公司 线段树
- [bzoj1568][JSOI2008]Blue Mary开公司——李超线段树
- [李超线段树 模板题] BZOJ 1568 [JSOI2008]Blue Mary开公司
- 数据结构(线段树):BZOJ 1568 [JSOI2008]Blue Mary开公司
- BZOJ1568:[JSOI2008]Blue Mary开公司——题解
- bzoj 1568: [JSOI2008]Blue Mary开公司
- bzoj1568: [JSOI2008]Blue Mary开公司 (超哥线段树)
- 【bzoj 1568】[JSOI2008]Blue Mary开公司(超哥线段树)
- bzoj千题计划219:bzoj1568: [JSOI2008]Blue Mary开公司
- BZOJ 1568: [JSOI2008]Blue Mary开公司(超哥线段树)
- bzoj 1568: [JSOI2008]Blue Mary开公司(超哥线段树)
- Bzoj1568 [JSOI2008]Blue Mary开公司
- 【bzoj1568】 JSOI2008—Blue Mary开公司
- 【BZOJ 1568】【JSOI 2008】Blue Mary开公司
- 【BZOJ-1568】Blue Mary开公司 李超线段树 (标记永久化)
- BZOJ 1568 Blue Mary开公司(线段树,标记永久化)
- BZOJ - 1568 - Blue Mary开公司(线段树标记永久化)