BZOJ_4311_向量_线段树按时间分治
BZOJ_4311_向量_CDQ分治+线段树按时间分治
Description
Input
Output
Sample Input
1 3 3
1 1 4
3 3 3
2 1
3 3 3
Sample Output
15
HINT
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
inline char nc() {
static char buf[100000],*p1,*p2;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
int rd() {
int x=0; char s=nc();
while(s<'0'||s>'9') s=nc();
while(s>='0'&&s<='9') x=(x<<3)+(x<<1)+s-'0',s=nc();
return x;
}
typedef long long ll;
typedef double f2;
#define ls p<<1
#define rs p<<1|1
#define N 200050
struct Point {
ll x,y;
Point() {}
Point(ll x_,ll y_) :
x(x_),y(y_) {}
};
struct A {
Point p;
int bg,ed;
bool operator < (const A &u) const {
return p.x<u.p.x;
}
}P[N];
f2 Slp(const Point &p1,const Point &p2) {
if(p1.x==p2.x) return p2.y>p1.y?1e18:-1e18;
return 1.0*(p2.y-p1.y)/(p2.x-p1.x);
}
ll f[N];
f2 qk[N];
ll qx[N],qy[N];
vector<Point>V[N<<2];
int n,m,id,t[N],tmp[N];
Point S[N];
void update(int l,int r,int x,int y,int p,Point pp) {
if(x<=l&&y>=r) {
V[p].push_back(pp); return ;
}
int mid=(l+r)>>1;
if(x<=mid) update(l,mid,x,y,ls,pp);
if(y>mid) update(mid+1,r,x,y,rs,pp);
}
Point pp;
void solve(int l,int r,int p) {
int i,lim;
if(l==r) {
lim=V[p].size();
for(i=0;i<lim;i++) {
pp=V[p][i];
f[l]=max(f[l],pp.x*qx[l]+pp.y*qy[l]);
}
return ;
}
int mid=(l+r)>>1;
solve(l,mid,ls); solve(mid+1,r,rs);
int j=l,k=mid+1; i=l;
while(j<=mid&&k<=r) {
if(qk[t[j]]>=qk[t[k]]) tmp[i++]=t[j++];
else tmp[i++]=t[k++];
}
while(j<=mid) tmp[i++]=t[j++];
while(k<=r) tmp[i++]=t[k++];
for(i=l;i<=r;i++) t[i]=tmp[i];
lim=V[p].size();
if(lim==0) return ;
int top=0;
for(i=0;i<lim;i++) {
pp=V[p][i];
while(top>1&&Slp(S[top-1],S[top])<=Slp(S[top-1],pp)) top--;
S[++top]=pp;
}
j=1;
for(i=l;i<=r;i++) {
while(j<top&&Slp(S[j],S[j+1])>=qk[t[i]]) j++;
f[t[i]]=max(f[t[i]],qx[t[i]]*S[j].x+qy[t[i]]*S[j].y);
}
}
int main() {
// freopen("tt.in","r",stdin);
// freopen("tt.out","w",stdout);
n=rd();
int opt,i,x,y;
for(i=1;i<=n;i++) {
opt=rd();
if(opt==1) {
x=rd(); y=rd();
P[++id].p=Point(x,y);
P[id].bg=m+1;
}else if(opt==2) {
x=rd();
P[x].ed=m;
if(!m) P[x].ed=-1;
}else {
m++; x=rd(); y=rd();
qk[m]=(-1.0*x/y);
qx[m]=x; qy[m]=y;
}
}
sort(P+1,P+id+1);
for(i=1;i<=id;i++) {
if(P[i].bg<=m&&P[i].ed!=-1) {
P[i].ed=P[i].ed?P[i].ed:m;
update(1,m,P[i].bg,P[i].ed,1,P[i].p);
}
// printf("%d %d\n",P[i].bg,P[i].ed);
}
for(i=1;i<=m;i++) t[i]=i;
solve(1,m,1);
for(i=1;i<=m;i++) printf("%lld\n",f[i]);
}
BZOJ_4311_向量_线段树按时间分治的更多相关文章
- BZOJ_4025_二分图_线段树按时间分治+并查集
BZOJ_4025_二分图_线段树按时间分治+并查集 Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简 ...
- 【bzoj4311】向量 线段树对时间分治+STL-vector维护凸包
题目描述 你要维护一个向量集合,支持以下操作: 1.插入一个向量(x,y) 2.删除插入的第i个向量 3.查询当前集合与(x,y)点积的最大值是多少.如果当前是空集输出0 输入 第一行输入一个整数n, ...
- 【CF576E】Painting Edges 线段树按时间分治+并查集
[CF576E]Painting Edges 题意:给你一张n个点,m条边的无向图,每条边是k种颜色中的一种,满足所有颜色相同的边内部形成一个二分图.有q个询问,每次询问给出a,b代表将编号为a的边染 ...
- 【BZOJ-4184 】 Shallot 线段树按时间分治 + 线性基
4184: shallot Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 356 Solved: 180[Submit][Status][Discu ...
- BZOJ_4184_shallot_线段树按时间分治维护线性基
BZOJ_4184_shallot_线段树按时间分治维护线性基 Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻 ...
- Bipartite Checking CodeForces - 813F (线段树按时间分治)
大意: 动态添边, 询问是否是二分图. 算是个线段树按时间分治入门题, 并查集维护每个点到根的奇偶性即可. #include <iostream> #include <sstream ...
- 【BZOJ4311】向量(线段树分治,斜率优化)
[BZOJ4311]向量(线段树分治,斜率优化) 题面 BZOJ 题解 先考虑对于给定的向量集,如何求解和当前向量的最大内积. 设当前向量\((x,y)\),有两个不同的向量\((u1,v1),(u2 ...
- BZOJ_4636_蒟蒻的数列_线段树+动态开点
BZOJ_4636_蒟蒻的数列_线段树+动态开点 Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将 ...
- BZOJ_3252_攻略_线段树+dfs序
BZOJ_3252_攻略_线段树+dfs序 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏< ...
随机推荐
- spring data jpa 查询部分字段
@Query("select new map(ah as ah,salq as sqlq,yg as yg, bg as bg,ay as ay) FROM Aj where ahdm=?1 ...
- [Bzoj3172][Tjoi2013]单词(fail树)
3172: [Tjoi2013]单词 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 4777 Solved: 2345[Submit][Status ...
- IoT设备程序开发及编译环境搭建初体验
引言 Mirai事件一经曝出,立即引领了一轮研究IoT设备的热潮.目前,对Mirai的报告大多只是在对其功能实现上的介绍,却很少提及如何实现IoT设备程序开发的测试环境.本文在对Mirai的源码研究的 ...
- 转: 在CentOS 6.X 上面安装 Python 2.7.X
转:https://ruiaylin.github.io/2014/12/12/python%20update/ 评注: yum -y update //这个更新太坑了,1120更新包...想死的心都 ...
- [WASM Rust] Use the js-sys Crate to Invoke Global APIs Available in Any JavaScript Environment
js-sys offers bindings to all the global APIs available in every JavaScript environment as defined b ...
- BZOJ 题目1036: [ZJOI2008]树的统计Count(Link Cut Tree,改动点权求两个最大值和最大值)
1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Limit: 162 MB Submit: 8421 Solved: 3439 [Submi ...
- CCPhysicsSprite
#ifndef __PHYSICSNODES_CCPHYSICSSPRITE_H__ #define __PHYSICSNODES_CCPHYSICSSPRITE_H__ #include " ...
- uva 11488 - Hyper Prefix Sets(字典树)
H Hyper Prefix Sets Prefix goodness of a set string is length of longest common prefix*number of str ...
- 常见ODBC及OLEDB连接串的写法
书 名:性能测试进阶指南——LoadRunner11实战 作 者:陈霁 关于数据库连接串的写法
- sql注入攻防 以php+mysql为例
随着Web应用的高速发展和技术的不断成熟,对Web开发相关职位的需求量也越来越大,越来越多的人加入了Web开发的行列.但是由于程序员的水平参差不齐或是安全意识太低,很多程序员在编写代码时仅考虑了功能上 ...