传送门
首先我们大力转换坐标系。
然后我们做一遍扫描线求出矩形面积的交。
然后我们减去在外面的部分,可以发现一定是等腰三角形
在搞一个面积并就可以了
时间复杂度O(NlogN)
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 300030
#define ll long long
using namespace std;
ll max(ll x,int y){
return x>y?x:y;
}
struct Squ{ll x,y,r;}s[N];
struct L{
ll x,y1,y2,k;
friend bool operator <(L a,L b){
return a.x<b.x;
}
};
struct Tri{
ll st,ed;
ll sqr(){
if ((ed-st+1)&1) return (ed-st+2)*((ed-st+1)/2+1)/2;
return (ed-st+3)*((ed-st-1)/2+1)/2;
}
friend bool operator <(Tri a,Tri b){
return a.st<b.st;
}
};
int n,m,k;
struct segment{
int tag[N*4],ans[N*4],p[N];
void clear(){
memset(tag,0,sizeof(tag));
memset(ans,0,sizeof(ans));
}
void update(int k,ll l,ll r){
if (tag[k]>0) ans[k]=r-l;
else ans[k]=ans[k*2]+ans[k*2+1];
}
void add(int k,int l,int r,int x,int y,int v){
int mid=(l+r)/2;
if (x<=p[l]&&p[r]<=y) tag[k]+=v;
else{
if (x<p[mid]) add(k*2,l,mid,x,y,v);
if (p[mid]<