VVQ line segment

Topic links: VVQ line segment


Two segments have a common point of two situations:

Intersection: r2 + l2 - (r1 + l1), min intervals to maintain such a case, the corresponding discharge point r (l + r)
comprising: r2-l2 - (r1- l1), this situation is maintained section min , the corresponding discharge point r (rl is an)

What we can do in each case.


AC Code:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=4e5+10;
int n,m,mi[N<<2],res;	vector<int> v;
struct node{int l,r;}t[N];
int cmp(node a,node b){return a.r<b.r;}
void build(int p,int l,int r){
	if(l==r){mi[p]=1e9;	return;}
	int mid=l+r>>1;
	build(p<<1,l,mid),build(p<<1|1,mid+1,r);
	mi[p]=min(mi[p<<1],mi[p<<1|1]);
}
void change(int p,int l,int r,int x,int v){
	if(l==r){mi[p]=min(mi[p],v);	return;}
	int mid=l+r>>1;
	if(x<=mid)	change(p<<1,l,mid,x,v);
	else	change(p<<1|1,mid+1,r,x,v);
	mi[p]=min(mi[p<<1],mi[p<<1|1]);
}
int ask(int p,int l,int r,int ql,int qr){
	if(l==ql&&r==qr)	return mi[p];
	int mid=l+r>>1;
	if(qr<=mid)	return ask(p<<1,l,mid,ql,qr);
	else if(ql>mid)	return ask(p<<1|1,mid+1,r,ql,qr);
	else return min(ask(p<<1,l,mid,ql,mid),ask(p<<1|1,mid+1,r,mid+1,qr));
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++)	
		scanf("%d %d",&t[i].l,&t[i].r),v.push_back(t[i].l),v.push_back(t[i].r);
	sort(v.begin(),v.end()),v.erase(unique(v.begin(),v.end()),v.end()); m=v.size();
	sort(t+1,t+1+n,cmp);	build(1,1,m);
	for(int i=1;i<=n;i++){
		t[i].l=lower_bound(v.begin(),v.end(),t[i].l)-v.begin()+1;
		t[i].r=lower_bound(v.begin(),v.end(),t[i].r)-v.begin()+1;
		res=max(res,v[t[i].l-1]+v[t[i].r-1]-ask(1,1,m,t[i].l,t[i].r));
		change(1,1,m,t[i].r,v[t[i].l-1]+v[t[i].r-1]);
	}
	build(1,1,m);
	for(int i=1;i<=n;i++){
		res=max(res,v[t[i].r-1]-v[t[i].l-1]-ask(1,1,m,t[i].l,t[i].r));
		change(1,1,m,t[i].r,v[t[i].r-1]-v[t[i].l-1]);
	}
	cout<<res;
	return 0;
}
Published 725 original articles · won praise 244 · views 40000 +

Guess you like

Origin blog.csdn.net/weixin_43826249/article/details/104896035