标签:des style http color os io strong for
解题报告
题意:
求矩形周长和。
思路:
左扫上扫,扫过了。
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> using namespace std; struct Seg { int lx,rx,ly,ry,h,v; friend bool operator < (Seg a,Seg b) { return a.h<b.h; } } seg1[11000],seg2[11000]; int _hx[21000],_hy[21000],sum[500000],lz[500000]; void push_up1(int rt,int l,int r) { if(lz[rt]) { sum[rt]=_hx[r+1]-_hx[l]; } else sum[rt]=sum[rt<<1]+sum[rt<<1|1]; } void update1(int rt,int l,int r,int ql,int qr,int v) { if(ql>r||qr<l)return ; if(ql<=l&&r<=qr) { lz[rt]+=v; push_up1(rt,l,r); return ; } int mid=(l+r)>>1; update1(rt<<1,l,mid,ql,qr,v); update1(rt<<1|1,mid+1,r,ql,qr,v); push_up1(rt,l,r); } void push_up2(int rt,int l,int r) { if(lz[rt]) { sum[rt]=_hy[r+1]-_hy[l]; } else sum[rt]=sum[rt<<1]+sum[rt<<1|1]; } void update2(int rt,int l,int r,int ql,int qr,int v) { if(ql>r||qr<l)return ; if(ql<=l&&r<=qr) { lz[rt]+=v; push_up2(rt,l,r); return ; } int mid=(l+r)>>1; update2(rt<<1,l,mid,ql,qr,v); update2(rt<<1|1,mid+1,r,ql,qr,v); push_up2(rt,l,r); } int main() { int lx,rx,ly,ry,n,i,j; scanf("%d",&n); for(i=0; i<n; i++) { scanf("%d%d%d%d",&lx,&ly,&rx,&ry); _hx[i]=lx,_hx[i+n]=rx,_hy[i]=ly,_hy[i+n]=ry; seg1[i].lx=lx,seg1[i].rx=rx,seg1[i].v=1,seg1[i].h=ly; seg1[i+n].lx=lx,seg1[i+n].rx=rx,seg1[i+n].v=-1,seg1[i+n].h=ry; seg2[i].ly=ly,seg2[i].ry=ry,seg2[i].v=1,seg2[i].h=lx; seg2[i+n].ly=ly,seg2[i+n].ry=ry,seg2[i+n].v=-1,seg2[i+n].h=rx; } sort(_hx,_hx+n*2); sort(_hy,_hy+n*2); sort(seg1,seg1+n*2); sort(seg2,seg2+n*2); int m1=unique(_hx,_hx+n*2)-_hx; int m2=unique(_hy,_hy+n*2)-_hy; int ans=0,ql,qr; memset(sum,0,sizeof(sum)); memset(lz,0,sizeof(lz)); for(i=0; i<n*2; i++) { ql=lower_bound(_hx,_hx+m1,seg1[i].lx)-_hx; qr=lower_bound(_hx,_hx+m1,seg1[i].rx)-_hx-1; int t=sum[1]; update1(1,0,m1-1,ql,qr,seg1[i].v); ans+=abs(sum[1]-t); } memset(sum,0,sizeof(sum)); memset(lz,0,sizeof(lz)); for(i=0; i<n*2; i++) { ql=lower_bound(_hy,_hy+m2,seg2[i].ly)-_hy; qr=lower_bound(_hy,_hy+m2,seg2[i].ry)-_hy-1; int t=sum[1]; update2(1,0,m2-1,ql,qr,seg2[i].v); ans+=abs(sum[1]-t); } printf("%d\n",ans); return 0; }
Time Limit: 2000MS | Memory Limit: 10000K | |
Total Submissions: 10332 | Accepted: 5485 |
Description
Input
Output
Sample Input
7 -15 0 5 10 -5 8 20 25 15 -4 24 14 0 -6 16 4 2 15 10 22 30 10 36 20 34 0 40 16
Sample Output
228
Source
POJ训练计划1177_Picture(扫描线/线段树+离散),布布扣,bubuko.com
POJ训练计划1177_Picture(扫描线/线段树+离散)
标签:des style http color os io strong for
原文地址:http://blog.csdn.net/juncoder/article/details/38521481