东莞金融网站建设dz网站收款即时到账怎么做的
东莞金融网站建设,dz网站收款即时到账怎么做的,欧米茄手表官方网,网页登录界面制作文章目录题目描述数据范围解析代码题目描述
你要维护一个向量集合#xff0c;支持以下操作#xff1a; 插入一个向量 。 删除插入的第 x 个向量。 查询当前集合与(x,y)(x,y)(x,y) 点积的最大值是多少。如果当前是空集输出0。 数据范围 n2e5,x、y∈[1,2e6]n2e5,x、y∈…
文章目录题目描述数据范围解析代码题目描述
你要维护一个向量集合支持以下操作 插入一个向量 。 删除插入的第 x 个向量。 查询当前集合与(x,y)(x,y)(x,y) 点积的最大值是多少。如果当前是空集输出0。 数据范围
n2e5,x、y∈[1,2e6]n2e5,x、y∈[1,2e6]n2e5,x、y∈[1,2e6]
解析
考虑作当前向量的垂线该线自上而下平移截得的第一个向量对应的点就是答案 如果本题没有删除操作可以利用一个凸包来维护 但是如何支持删除呢 考虑离线对询问时间维护一个线段树 那么每个向量都有一个对应的有效区间 把该向量按照区间修改的方式加到线段树上对每个线段树节点维护一个凸包 询问是从叶节点一直往上走对每一个节点的凸包二分找到切点一直更新答案
代码
#includebits/stdc.h
using namespace std;
const int N2e5100;
const int M2e6100;
#define ll long long
ll read(){ll x0,f1;char cgetchar();while(!isdigit(c)){if(c-)f-1;cgetchar();};while(isdigit(c)){xx*10c-0;cgetchar();};return x*f;
}
int n,m;
struct node{ll x,y;int id;bool operator (const node o){if(x!o.x) return xo.x;return yo.y;}
}p[N],ask[N];
int num,ans[N],cnt;
#define mid ((lr)1)
#define ls (k1)
#define rs (k1|1)
#define ed (tr[k].size()-1)
vectorinttr[N2];
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,xmid,ymid);if(xlry){//printf( add:l%d r%d o%d\n,l,r,o);add(k,o);return;}if(xmid) insert(ls,l,mid,x,y,o);if(ymid) insert(rs,mid1,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 i0;itr[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 l0,red;while(lr){int o(lr)1;if(oed||(p[tr[k][o1]].y-p[tr[k][o]].y)*y-x*(p[tr[k][o1]].x-p[tr[k][o]].x)) ro;else lo1;//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 plfind(k,x,y);ll respl-1?0:x*p[pl].xy*p[pl].y;if(lr) return res;if(omid) resmax(res,query(ls,l,mid,o,x,y));else resmax(res,query(rs,mid1,r,o,x,y));return res;
}
int st[N],eed[N];
int main(){nread();
// for(int i1;i100;i) tr[i].resize(10);for(int i1;in;i){int fread();if(f1){int xread(),yread();//printf(%d %d %d\n,f,x,y);p[cnt](node){x,y,cnt};st[cnt]i;eed[cnt]n;}else if(f2){int xread();eed[x]i-1;//printf(%d %d\n,f,x);}else{int xread(),yread();//printf(%d %d %d\n,f,x,y);ask[num](node){x,y,i};}}sort(p1,p1cnt);for(int i1;icnt;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 i1;inum;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/pingmian/89146.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!