标签: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