第二道线段树分治。

首先设当前向量是(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]);
}

bzoj4311向量(线段树分治+斜率优化)的更多相关文章

  1. 【BZOJ3672】【NOI2014】购票(线段树,斜率优化,动态规划)

    [BZOJ3672][NOI2014]购票(线段树,斜率优化,动态规划) 题解 首先考虑\(dp\)的方程,设\(f[i]\)表示\(i\)的最优值 很明显的转移\(f[i]=min(f[j]+(de ...

  2. 【BZOJ-3672】购票 树分治 + 斜率优化DP

    3672: [Noi2014]购票 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 1177  Solved: 562[Submit][Status][ ...

  3. 【BZOJ3672】[Noi2014]购票 树分治+斜率优化

    [BZOJ3672][Noi2014]购票 Description  今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会.       ...

  4. 【BZOJ4311】向量(线段树分治,斜率优化)

    [BZOJ4311]向量(线段树分治,斜率优化) 题面 BZOJ 题解 先考虑对于给定的向量集,如何求解和当前向量的最大内积. 设当前向量\((x,y)\),有两个不同的向量\((u1,v1),(u2 ...

  5. [BZOJ4311]向量(凸包+三分+线段树分治)

    可以发现答案一定在所有向量终点形成的上凸壳上,于是在上凸壳上三分即可. 对于删除操作,相当于每个向量有一个作用区间,线段树分治即可.$O(n\log^2 n)$ 同时可以发现,当询问按斜率排序后,每个 ...

  6. 2019.02.26 bzoj4311: 向量(线段树分治+凸包)

    传送门 题意: 支持插入一个向量,删去某一个现有的向量,查询现有的所有向量与给出的一个向量的点积的最大值. 思路: 考虑线段树分治. 先对于每个向量处理出其有效时间放到线段树上面,然后考虑查询:对于两 ...

  7. BZOJ4311 向量(线段树分治+三分)

    由点积的几何意义(即投影)可以发现答案一定在凸壳上,并且投影的变化是一个单峰函数,可以三分.现在需要处理的只有删除操作,线段树分治即可. #include<iostream> #inclu ...

  8. 洛谷.3733.[HAOI2017]八纵八横(线性基 线段树分治 bitset)

    LOJ 洛谷 最基本的思路同BZOJ2115 Xor,将图中所有环的异或和插入线性基,求一下线性基中数的异或最大值. 用bitset优化一下,暴力的复杂度是\(O(\frac{qmL^2}{w})\) ...

  9. 线段树分治总结(线段树分治,线段树,并查集,树的dfn序,二分图染色)

    闲话 stO猫锟学长,满脑子神仙DS 网上有不少Dalao把线段树分治也归入CDQ分治? 还是听听YCB巨佬的介绍: 狭义:只计算左边对右边的贡献. 广义:只计算外部对内部的贡献. 看来可以理解为广义 ...

随机推荐

  1. reduce()、filter()、map()、some()、every()、...展开属性

    reduce().filter().map().some().every()....展开属性   这些概念属于es5.es6中的语法,跟react+redux并没有什么联系,我们直接在https:// ...

  2. 7.Python列表

    .button, #logout { color: #333; background-color: #fff; border-color: #ccc; } span#login_widget > ...

  3. enlipse 快捷键

    ctrl+shift+o  去掉多余的引用类

  4. [题解] LuoguP3784 [SDOI2017]遗忘的集合

    要mtt的题都是...... 多补了几项就被卡了一整页......果然还是太菜了...... 不说了......来看100分的做法吧...... 如果做过付公主的背包,前面几步应该不难想,所以我们再来 ...

  5. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:SSM(Spring+Spring MVC+MyBatis)框架整合搭建详细步骤

    因为 Spring MVC 是 Spring 框架中的一个子模块,所以 Spring 与 SpringMVC 之间不存在整合的问题.实际上,SSM 框架的整合只涉及 Spring 与 MyBatis ...

  6. Python MySQL 创建表

    章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...

  7. Windows系统安装免费的开源虚拟机软件VirtualBox

    https://www.qikegu.com/uncategorized/1179 VirtualBox是什么 VirtualBox是一个虚拟机平台软件,在VirtualBox平台上可以安装各种操作系 ...

  8. POJ 1408:Fishnet

    Fishnet Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 1921   Accepted: 1234 Descripti ...

  9. c++ auto_ptr笔记

    1.auto_ptr 不可以使用指针惯用的赋值初始化方式,只能直接初始化. 示例:  char *p = 'A';//error  auto_ptr<char>ptr = new char ...

  10. 通过整合遥感数据和社交媒体数据来进行城市土地利用的分类( Classifying urban land use by integrating remote sensing and social media data)DOI: 10.1080/13658816.2017.1324976 20.0204

    Classifying urban land use by integrating remote sensing and social media data   Xiaoping Liu, Jialv ...