第二道线段树分治。

首先设当前向量是(x,y),剩余有两个不同的向量(u1,v1)(u2,v2),假设u1>u2,则移项可得,若(u1,v1)优于(u2,v2),则-x/y>(v1-v2)/(u1-u2),然后维护上凸壳后进行三分即可,复杂度O(nlog2n),如果将询问排序扫一遍,可以优化到O(nlogn),当然我没写。

#include<bits/stdc++.h>
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
using namespace std;
typedef long long ll;
const int N=2e5+;
struct node{int x,y,l,r;}p[N],q[N];
int n,tim,tot,top;
ll ans[N];
vector<node>a[N<<];
node st[N];
bool cmp(node a,node b){return a.x==b.x?a.y<b.y:a.x<b.x;}
ll dot(node a,node b){return 1ll*a.x*b.x+1ll*a.y*b.y;}
ll cross(node a,node b,node c){return 1ll*(a.x-c.x)*(b.y-c.y)-1ll*(a.y-c.y)*(b.x-c.x);}
void update(int L,int R,int id,int l,int r,int rt)
{
if(L<=l&&r<=R){a[rt].push_back(p[id]);return;}
int mid=l+r>>;
if(L<=mid)update(L,R,id,lson);
if(R>mid)update(L,R,id,rson);
}
ll query(int id)
{
int l=,r=top,m1,m2;
ll ret=;
while(r-l>=)
{
m1=l+(r-l)/,m2=r-(r-l)/;
if(dot(q[id],st[m1])<=dot(q[id],st[m2]))l=m1;else r=m2;
}
for(int i=l;i<=r;i++)ret=max(ret,dot(q[id],st[i]));
return ret;
}
void work(int x,int l,int r)
{
if(!a[x].size())return;
top=;
sort(a[x].begin(),a[x].end(),cmp);
for(int i=;i<a[x].size();i++)
{
while(top>&&cross(st[top-],st[top],a[x][i])>=)top--;
st[++top]=a[x][i];
}
for(int i=l;i<=r;i++)ans[i]=max(ans[i],query(i));
}
void divide(int l,int r,int rt)
{
work(rt,l,r);
if(l==r)return;
int mid=l+r>>;divide(lson),divide(rson);
}
int main()
{
scanf("%d",&n);
for(int i=,op,x,y;i<=n;i++)
{
scanf("%d%d",&op,&x);
if(op==)scanf("%d",&y),p[++tot]=(node){x,y,tim+,-};
else if(op==)p[x].r=tim;
else scanf("%d",&y),q[++tim]=(node){x,y,tim,tim};
}
for(int i=;i<=tot;i++)if(p[i].r==-)p[i].r=tim;
for(int i=;i<=tot;i++)if(p[i].l<=p[i].r)update(p[i].l,p[i].r,i,,tim,);
divide(,tim,);
for(int i=;i<=tim;i++)printf("%lld\n",ans[i]);
}

最新文章

  1. [MapReduce] Google三驾马车:GFS、MapReduce和Bigtable
  2. UWP&amp;WP8.1 重新绘制图片 WriteableBitmap用法 图片转byte[]数组,byte[]数组转图片
  3. eclipse安装ADT
  4. Linux学习路线
  5. jsp的标签
  6. Google地图接口API之Google地图 API 参考手册(七)
  7. DropzoneJS 使用指南
  8. 常用的rpm和yum的一些命令
  9. 20145305 《Java程序设计》第3周学习总结
  10. 文件夹工具类 - FolderUtils
  11. (Android Studio)添加文本框
  12. SpringMVC+Hibernate架构save方法事务未提交
  13. 理解javascript之 对象
  14. TIOBE.2017.01最新编程语言排行榜
  15. hdu 畅通工程续
  16. redis内存管理
  17. 安利三款提升幸福感的chrome插件
  18. Lintcode399 Nuts &amp; Bolts Problem solution 题解
  19. neutron-删除负载均衡器
  20. Mysql数据库左外连接,右外连接,模糊查询

热门文章

  1. DISCOVERING THE ANTI-VIRUS SIGNATURE AND BYPASSING IT
  2. EditText监听器------实时监听
  3. C语言备忘录——运算符优先级
  4. 【docker】docker持续集成CI/持续部署CD
  5. 开源DDD设计模式框架YMNNetCoreFrameWork第6篇-.net Core Logging和Nlog结合
  6. ES6 之 对象属性的可枚举性和遍历
  7. 第二阶段scrum-4
  8. SPOJ_DSUBSEQ Distinct Subsequences
  9. js对象等号赋值的bug
  10. 苏州大学ICPC集训队新生赛第二场