#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define iinf 2000000000
#define linf 1000000000000000000ll
#define dinf 1e200
#define eps 1e-5
#define all(v) (v).begin(),(v).end()
#define sz(x) x.size()
#define pb push_back
#define mp make_pair
#define lng long long
#define sqr(a) ((a)*(a))
#define pii pair#define pll pair#define pss pair#define pdd pair#define x first
#define y second
#define pi 3.14159265359
#define ff(i,xi,n) for(int i=xi;i<=(int)(n);++i)
#define ffd(i,xi,n) for(int i=xi;i>=(int)(n);--i)
#define ffl(i,r) for(int i=head[r];i!=-1;i=edge[i].next)
#define cc(i,j) memset(i,j,sizeof(i))
#define two(x) ((lng)1<<(x))
#define n 22222
#define m 1000000
#define lson l , mid , rt << 1
#define rson mid + 1 , r , rt << 1 | 1
#define mod n
#define pmod(x) (x%mod+mod)%mod
using namespace std;
typedef vectorvi;
typedef vectorvs;
typedef unsigned int uint;
typedef unsigned lng ulng;
templateinline void checkmax(t &x,t y)
templateinline t min(t x,t y)
templateinline t max(t x,t y)
templatet lcm(t a,t b)
templatet abs(t a)
templateinline t lowbit(t n)
templateinline int countbit(t n)
templateinline bool isprimenumber(t n)
int le[n<<2],ri[n<<2],len[n<<2],num[n<<2],cnt[n<<2],n;
struct ps
}a[n*2];
bool cmp(ps p,ps q)
inline void pushup(int rt,int l,int r)
else
if(l==r) len[rt]=num[rt]=le[rt]=ri[rt]=0;
else
}void update(int l,int r,int c,int l,int r,int rt)
int mid=(l+r)>>1;
if(l<=mid) update(l,r,c,lson);
if(r>mid) update(l,r,c,rson);
pushup(rt,l,r);
}int main()
sort(a+1,a+1+2*n,cmp);
int ans=0,pre=0;
ff(i,1,2*n-1)
ans+=len[1];
printf("%d\n",ans);
}return 0;
}
hdu1828線段樹 掃瞄線
矩形求周長類似矩形合併求面積,只是多了需要統計豎邊的個數,對於每次求到的下底邊長還要增加目前底邊與下一條底邊之間的豎邊總長 1,n個矩形有2 n條線段,按從小到大排列,如上圖得到的線段順序 開始掃瞄第一條線段,得到總底邊長sum為a這部分,得到豎邊個數segnum 2,每增加一條底邊segnum 2...
HDU 1828 掃瞄線求周長
思路 可以使用1條掃瞄線.從下往上我掃,在掃的過程中,周長就是下面的橫座標的投影加上上下兩條座標之差乘上縱座標線段數 需要注意重邊 include include include include include include include include include include defi...
HDU 1828 Picture 線段樹 掃瞄線
題意 給你一些矩形的左上角點的座標和右下角點的座標,求周長並 最顯而易見的思路就是對於x軸和y軸做兩次掃瞄線,對於負數的座標進行離散化。每次增加的值是線段變化量的絕對值。具體寫法和求面積並的差不多。include include include include using namespace std...