YBTOJ:向量问题(线段树分治、凸包)

文章目录

  • 题目描述
    • 数据范围
  • 解析
  • 代码

题目描述

你要维护一个向量集合,支持以下操作:

插入一个向量 。
删除插入的第 x 个向量。
查询当前集合与(x,y)(x,y)(x,y) 点积的最大值是多少。如果当前是空集输出0。

数据范围

n<=2e5,x、y∈[1,2e6]n<=2e5,x、y∈[1,2e6]n<=2e5,xy[1,2e6]

解析

考虑作当前向量的垂线,该线自上而下平移截得的第一个向量对应的点就是答案
如果本题没有删除操作,可以利用一个凸包来维护
但是如何支持删除呢?
考虑离线,对询问时间维护一个线段树
那么每个向量都有一个对应的有效区间
把该向量按照区间修改的方式加到线段树上,对每个线段树节点维护一个凸包
询问是从叶节点一直往上走,对每一个节点的凸包二分找到切点一直更新答案

代码

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+100;
const int M=2e6+100;
#define ll long long
ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();};while(isdigit(c)){x=x*10+c-'0';c=getchar();};return x*f;
}
int n,m;
struct node{ll x,y;int id;bool operator < (const node o){if(x!=o.x) return x<o.x;return y<o.y;}
}p[N],ask[N];
int num,ans[N],cnt;
#define mid ((l+r)>>1)
#define ls (k<<1)
#define rs (k<<1|1)
#define ed (tr[k].size()-1)
vector<int>tr[N<<2];
void add(int k,int x){while(tr[k].size()>1&&(p[tr[k][ed]].y-p[tr[k][ed-1]].y)*(p[x].x-p[tr[k][ed]].x)<=(p[x].y-p[tr[k][ed]].y)*(p[tr[k][ed]].x-p[tr[k][ed-1]].x)) tr[k].pop_back();tr[k].push_back(x);
}
void insert(int k,int l,int r,int x,int y,int o){//printf("insert:l=%d r=%d x=%d y=%d o=%d mid=%d %d %d\n",l,r,x,y,o,mid,x<=mid,y>mid);if(x<=l&&r<=y){//printf("  add:l=%d r=%d o=%d\n",l,r,o);add(k,o);return;}if(x<=mid) insert(ls,l,mid,x,y,o);if(y>mid) insert(rs,mid+1,r,x,y,o);
}
int find(int k,ll x,ll y){//printf("  k=%d find: siz=%d\n",k,tr[k].size());//for(int i=0;i<tr[k].size();i++) printf("  (%lld %lld)",p[tr[k][i]].x,p[tr[k][i]].y);//printf("\n");if(!tr[k].size()) return -1;else if(tr[k].size()==1||(p[tr[k][ed]].y-p[tr[k][ed-1]].y)*y>=-x*(p[tr[k][ed]].x-p[tr[k][ed-1]].x)) return tr[k][ed];int l=0,r=ed;while(l<r){int o=(l+r)>>1;if(o==ed||(p[tr[k][o+1]].y-p[tr[k][o]].y)*y<=-x*(p[tr[k][o+1]].x-p[tr[k][o]].x)) r=o;else l=o+1;//printf("    o=%d l=%d r=%d\n",o,l,r);}return tr[k][l];
}
ll query(int k,int l,int r,int o,ll x,ll y){//printf("k=%d l=%d r=%d x=%lld y=%lld\n",k,l,r,x,y);int pl=find(k,x,y);ll res=pl==-1?0:x*p[pl].x+y*p[pl].y;if(l==r) return res;if(o<=mid) res=max(res,query(ls,l,mid,o,x,y));else res=max(res,query(rs,mid+1,r,o,x,y));return res;
}
int st[N],eed[N];
int main(){n=read();
//	for(int i=1;i<=100;i++) tr[i].resize(10);for(int i=1;i<=n;i++){int f=read();if(f==1){int x=read(),y=read();//printf("%d %d %d\n",f,x,y);p[++cnt]=(node){x,y,cnt};st[cnt]=i;eed[cnt]=n;}else if(f==2){int x=read();eed[x]=i-1;//printf("%d %d\n",f,x);}else{int x=read(),y=read();//printf("%d %d %d\n",f,x,y);ask[++num]=(node){x,y,i};}}sort(p+1,p+1+cnt);for(int i=1;i<=cnt;i++){//printf("i=%d l=%d r=%d\n",i,st[p[i].id],eed[p[i].id]);insert(1,1,n,st[p[i].id],eed[p[i].id],i);}for(int i=1;i<=num;i++){printf("%lld\n",query(1,1,n,ask[i].id,ask[i].x,ask[i].y));}return 0;
}
/*
5
3 84040 650026
3 702678 199950
1 826333 497249
1 133580 956915
3 36119 655069
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 网站运行时修改设置如何自动生效

点击蓝字关注我在ASP.NET Core中&#xff0c;如果修改了appsettings.json中的设置&#xff0c;那么默认情况下就得重启网站才能生效。有没有办法在修改设置后自动刷新并应用呢&#xff1f;背景首先&#xff0c;我们看看默认模板建出来的 ASP.NET Core 网站&#xff0c;配置文件…

AGC004(A~E)

前言 FFF不会做&#xff0c;正解好神仙&#xff0c;爬了 正题 AT2041 [AGC004A] Divide a Cuboid https://www.luogu.com.cn/problem/AT2041 题目大意 一个A∗B∗CA*B*CA∗B∗C的立方体&#xff0c;分成两个长方体使得边长都是整数而且体积差最小。 1≤A,B,C≤1091\leq A,B…

1022. 宠物小精灵之收服

1022. 宠物小精灵之收服 题意&#xff1a; 现在有n个胶囊&#xff0c;m个生命值&#xff0c;k个怪物&#xff0c;每个怪物需要a[i]个胶囊&#xff0c;且会造成b[i]个伤害后才能捕获&#xff0c;问在活着的前提下&#xff0c;最多捕获多少怪物&#xff0c;在怪物最多的情况下剩…

平衡树 - FHQ 学习笔记

平衡树 - FHQ 学习笔记 主要参考万万没想到 的 FHQ-Treap学习笔记。 本片文章的姊妹篇&#xff1a;平衡树 - Splay 学习笔记。 感觉完全不会平衡树&#xff0c;又重新学习了一遍 FHQ&#xff0c;一口气把常见套路都学完了。 一、大致内容及分类 FHQ(???)&#xff0c;全称非旋…

【周末狂欢赛6】[AT1219]历史研究(回滚莫队),大魔法师(矩阵+线段树),单峰排列

文章目录T1&#xff1a;单峰排列题目题解codeT2&#xff1a;历史研究题目题解codeT3&#xff1a;大魔法师题目题解code我可能这辈子都更不出来狂欢赛5了&#xff0c;先咕咕 T1&#xff1a;单峰排列 题目 一个n的全排列A[i]是单峰的&#xff0c;当且仅当存在某个x使得A[1]<…

YBTOJ:圈套问题(分治法、鸽笼原理)

文章目录题目描述数据范围解析代码图片转载自&#xff1a; https://blog.csdn.net/weixin_43346722/article/details/118435430题目描述 平面上有 n个点&#xff0c;用n个大小相同的圆分别将一个点作为圆心&#xff0c;同时满足圆圈不相交&#xff0c;求圆的最大半径。 数据范…

CF1598E-Staircases【计数】

正题 题目链接:https://www.luogu.com.cn/problem/CF1598E 题目大意 给出一个nmn\times mnm的网格图&#xff0c;开始所有都是黑色的&#xff0c;qqq次取反一个格子的颜色&#xff0c;然后求楼梯的数量。 楼梯定义为全黑色的下/右交替的格子集。 1≤n,m≤1000,1≤q≤1041\le…

ASP.NET Core 实战:使用 NLog 将日志信息记录到 MongoDB

一、前言在项目开发中&#xff0c;日志系统是系统的一个重要组成模块&#xff0c;通过在程序中记录运行日志、错误日志&#xff0c;可以让我们对于系统的运行情况做到很好的掌控。同时&#xff0c;收集日志不仅仅可以用于诊断排查错误&#xff0c;由于日志同样也是大量的数据&a…

532. 货币系统

532. 货币系统 题意&#xff1a; 有 n 种不同面额的货币&#xff0c;第 i 种货币的面额为 a[i]&#xff0c;每一种货币都有无穷多张&#xff0c;货币之间可以彼此代替&#xff0c;比如6等于两张3&#xff0c;问有多少种货币是不可替代的 题解&#xff1a; 我们换一个问…

概率期望题(期望 DP)做题记录

概率期望题(期望 DP)做题记录 P3830 [SHOI2012]随机树 难点在于第二问&#xff1a;生成树的期望深度。 不 wei zhuo 捏&#xff0c;设 \(dp_{i,j}\) 表示已经有了 \(i\) 个叶子结点&#xff0c;深度大于 \(j\) 的概率。 考虑枚举一棵子树的大小&#xff0c;转移方程如下&#x…

[学习笔记] 伸展树splay详解+全套模板+例题[Luogu P3369 【模板】普通平衡树]

文章目录引入概念全套模板变量声明updaterotate旋转splay操作insert插入delete删除查找x的位置查找第k大前驱/后继极小值-inf和极大值inf的作用例题&#xff1a;P3369 【模板】普通平衡树题目code声明一下&#xff0c;许多代码的注解都在模板代码里面写了的&#xff0c;所以正文…

2021.9.23模拟

前言 174pts 40502460 四个暴力分 qwq T1想切结果矩乘T飞了。。。 不要迷信矩乘&#xff0c;这玩意也是会T的… 考场 先看题 感觉T1和T最可做 T3期望想到zld的全排列大法了&#xff0c;但是似乎只能线性… T4是初始化加强版&#xff0c;思路倒是有&#xff0c;但是不想写&am…

AT1981-[AGC001C]Shorten Diameter

正题 题目链接:https://www.luogu.com.cn/problem/AT1981 题目大意 给出nnn个点的一棵树&#xff0c;每次你可以删除一个叶子&#xff0c;求最少的操作数使得树的直径长度不超过kkk。 1≤n,k≤20001\leq n,k\leq 20001≤n,k≤2000 解题思路 开始以为是dpdpdp啥的&#xff0c…

手写AspNetCore 认证授权代码

在普通的MVC项目中 我们普遍的使用Cookie来作为认证授权方式&#xff0c;使用简单。登录成功后将用户信息写入Cookie&#xff1b;但当我们做WebApi的时候显然Cookie这种方式就有点不适用了。在dotnet core 中 WebApi中目前比较流行的认证授权方式是Jwt (Json Web Token) 技术。…

FWT 学习笔记

FWT 学习笔记 学的时候比较匆忙&#xff0c;于是就学一个 \(\texttt{or,and,xor}\) 卷积跑路。 P4717 【模板】快速莫比乌斯/沃尔什变换 (FMT/FWT) 前置知识&#xff1a;高维前缀和&#xff0c;下面前缀和的操作大多都是用高维前缀和来实现的。 设有两个长度为 \(2^n\) 的序列 …

大盗阿福

大盗阿福 题意&#xff1a; 长度为n的数组a&#xff0c;不能取连续的数&#xff0c;问所能取的最大值是多少 题解&#xff1a; 设dp[i][0]表示第i个数不选&#xff0c;dp[i][1]表示第i个数选 如果第i个数不选&#xff0c;那么第i-1个数可以选也可以不选&#xff0c;我们取最…

YBTOJ:采矿战略(线段树维护dp、树链剖分)

文章目录题目描述解析代码题目描述 所谓线段树维护dp&#xff0c;就是在线段树上维护dp &#xff08;逃&#xff09; 解析 把树剖一下后就变成了区间问题 考虑建一棵线段树&#xff0c;每一个结点都是一个背包 这样就能区间查询&#xff0c;也能带修了 这种做法复杂度其实并不…

【用皇宫三十六计生存法则带你走进LCT(动态树)】LCT概念+模板+例题【洛谷P3690 Link Cut Tree(动态树)】

文章目录LCT概念模板rotatoisrootsplayaccessmakerootsplitfindrootlinkcut封装版例题题目code普通版code封装版这篇博客主要是帮助大家理解各个模板及LCTLCTLCT的意思&#xff0c;方便理解&#xff0c;模板写法的理解在代码里有注释详解&#xff0c;如果要看原理的话&#xff…

AGC002(D~F)【Kruskal重构树,博弈论,dp】

正题 AT1998 [AGC002D] Stamp Rally【Kruskal重构树,倍增】 https://www.luogu.com.cn/problem/AT1998 题目大意 给出nnn个点mmm条边的一张无向图&#xff0c;qqq次询问两个人分别从x,yx,yx,y&#xff0c;要求总共经过zzz个点的情况下经过边的最大编号的最小值。 1≤n,m,q≤…

迈向现代化的 .Net 配置指北

1. 欢呼 .NET Standard 时代我现在已不大提 .Net Core&#xff0c;对于我来说&#xff0c;未来的开发将是基于 .NET Standard&#xff0c;不仅仅是 面向未来 &#xff0c;也是 面向过去&#xff1b;不只是 .Net Core 可以享受便利&#xff0c; .NET Framework 不升级一样能享受…