https://codeforces.com/gym/101987/attachments
题意:有n个矩形,可以放两条平行与x轴的线,求怎么放置两条无限长的平行于x轴的线,使得他们与矩形相交个数最多,如果一个矩形同时与两条线相交,只算一次。
思路:与这道题https://blog.csdn.net/Wen_Yongqi/article/details/99767004有相似之处。
因为水平线无限长,所以x坐标无任何意义,只需考虑y坐标,等效成n条竖线。
求出在每个y坐标上划一条直线的穿过数目,然后枚举这条,计算另一条,用一端+1另一端-1来使得没有重复,即时刻保证前面枚举的直线不穿过线段树里的矩形。
#include<bits/stdc++.h>
using namespace std;
const int maxn=200000+100;
int n,sz,x[maxn],y[maxn],cnt[maxn],ans;
vector<int> in[maxn],out[maxn];
vector<int> nums;
int addv[maxn*4],maxv[maxn*4],ql,qr,_max,v;
void maintain(int o,int l,int r)
{
int lc=o*2,rc=o*2+1;
if(l==r)maxv[o]=addv[o];
else
{
maxv[o]=max(maxv[lc],maxv[rc]);
maxv[o]+=addv[o];
}
}
void update(int o,int l,int r)