亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? poj 1177 矩形周長并 線段樹.txt

?? ACM資料大集合
?? TXT
字號:
//POJ 1177
/*
//#include <iostream>
#include <stdio.h>
//include <algorithm>
#include <math.h>
#include <stdlib.h>
#include <time.h>
//using namespace std;

#define NMAX 30000
#define MAX 99999999
typedef struct noid
{
	int low;
	int high;
	int len;//測度
	int line;//連續(xù)段數(shù)
	int cc;//覆蓋的線段個(gè)數(shù)
	int lcover,rcover;//左右端點(diǎn)是否被覆蓋
}noid;

typedef struct shuxian
{
	int tag;//矩形的左豎線還是右豎線
	int x;//橫坐標(biāo)
	int y1;//低位縱坐標(biāo)
	int y2;//高位縱坐標(biāo)
}shuxian;

noid tree[NMAX*3];
shuxian shuru[NMAX];
shuxian chuli[NMAX];
int lisan[NMAX*2];
int temp[NMAX*2];
int lsnum;//離散后的不重復(fù)的縱坐標(biāo)個(gè)數(shù)

void print_tree_lh()
{
	int i;
	printf("this is tree's low and high\n");
	for(i=1;i<=lsnum*3;i++)
	{
		printf("[%d %d]",tree[i].low,tree[i].high);
		if(i==1||i==3||i==7||i==15||i==31) printf("\n");
	}
	system("pause");
}

void print_tree_llc()
{
	int i;
	printf("this is tree's len, line and cc\n");
	for(i=1;i<=lsnum*3;i++)
	{
		printf("[%d %d %d %d %d]",tree[i].len,tree[i].line,tree[i].cc,tree[i].lcover,tree[i].rcover);
		if(i==1||i==3||i==7||i==15||i==31) printf("\n");
	}
	system("pause");
}
int cmpint(const void *a,const void *b)
{
	return (*(int *)a)-(*(int *)b);
}

int search_y(int key)
{
	int *p;
	p=(int *)bsearch(&key,lisan+1,lsnum,sizeof(int),cmpint);
	return p-lisan;
}

int cmppos(const void * a,const void * b)
{
	int tt=(((struct shuxian *)a)->x)-(((struct shuxian *)b)->x);
	if(tt==0) return (((struct shuxian *)a)->tag)-(((struct shuxian *)b)->tag);
	return tt;
}

void create(int p,int l,int h)
{
	int mid;
	mid=(l+h)/2;
	tree[p].low=l;
	tree[p].high=h;
	tree[p].len=tree[p].line=tree[p].cc=0;
	if(h-l>1)
	{
		create(p*2,l,mid);
		create(p*2+1,mid,h);
	}
}

void update(int p)
{
	if(p>=8000) printf("no\n");
//	printf("update (1) p=%d low=%d high=%d\n",p,tree[p].low,tree[p].high);
	if(tree[p].cc > 0) 
	{
		tree[p].lcover=tree[p].rcover=tree[p].line=1;
		tree[p].len=lisan[tree[p].high]-lisan[tree[p].low];
//		printf("update (2) tree[%d].len=%d\n",p,tree[p].len);
//		print_tree_llc();
	}
	else
	{
		if(tree[p].low+1 != tree[p].high)
		{
			tree[p].lcover=tree[2*p].lcover;
			tree[p].rcover=tree[2*p+1].rcover;
			tree[p].len=tree[2*p].len + tree[2*p+1].len;
			tree[p].line=tree[2*p].line + tree[2*p+1].line - tree[2*p].rcover * tree[2*p+1].lcover;
//			print_tree_llc();
		}
		else
		{
			tree[p].len=tree[p].lcover=tree[p].rcover=tree[p].line=0;
//			print_tree_llc();
		}
	}
}
void insert(int p,int l,int h)
{
	int mid;
	if(p>=8000) printf("no\n");
//	printf("insert p=%d l=%d h=%d\n",p,l,h);
	mid=(tree[p].low+tree[p].high)/2;
	if(l<=tree[p].low && h>=tree[p].high) tree[p].cc++;
	else
	{
		if(l<mid) insert(2*p,l,h);
	   	if(h>mid) insert(2*p+1,l,h); 	
	}
	update(p);
}
 
void ddelete(int p,int l,int h)
{
	int mid;
	if(p>=8000) printf("no\n");
	mid=(tree[p].low+tree[p].high)/2;
	if(l<=tree[p].low && h>=tree[p].high) tree[p].cc--;
	else
	{
		if(l<mid) ddelete(2*p,l,h);
	   	if(h>mid) ddelete(2*p+1,l,h); 	
	}
	update(p);
}

void init(int num)
{
	int i,j;
	for(i=1;i<=num;i++)
	{
//		printf("init (1) shuru[%d]=%d\n",i,shuru[i].x);
	}
	for(i=1;i<=num;i++) chuli[i]=shuru[i];
	for(i=1;i<=num;i++)
		qsort(chuli+1,num,sizeof(shuxian),cmppos);
	for(i=1;i<=num;i++)
	{
//		printf("init (2) chuli[%d]=%d\n",i,chuli[i].x);
	}
	for(i=1,j=0;i<=num;i++)
	{
		temp[++j]=chuli[i].y1;
		temp[++j]=chuli[i].y2;
	}
	qsort(temp+1,num*2,sizeof(int),cmpint);
	lisan[1]=temp[1];
	for(i=2,j=1;i<=2*num;i++)
	{
		if(temp[i]!=temp[i-1]) lisan[++j]=temp[i];
	}
	lsnum=j;
	for(i=1;i<=lsnum;i++)
	{
//		printf("init (3) lisan[%d]=%d\n",i,lisan[i]);
	}
	for(i=1;i<=lsnum;i++)
	{
//		printf("init (4) %d == %d\n",lisan[i],search_y(lisan[i]));
	}
	create(1,1,j);
//	print_tree_lh();
//	system("pause");
}

int solve(int num)
{
	int i,lastx,lasty,ans=0,be,end,qq;
	be=search_y(chuli[1].y1);
	end=search_y(chuli[1].y2);
//	printf("solve (1)\n"); 
	insert(1,be,end);
	lastx=chuli[1].x;
	lasty=tree[1].len;
	ans+=tree[1].len;
//	printf("ans=%d\n",ans);
//	print_tree_llc();
	for(i=2;i<=num;i++)
	{
		be=search_y(chuli[i].y1);
		end=search_y(chuli[i].y2);
		qq=2*tree[1].line*(chuli[i].x-chuli[i-1].x);
		ans+=qq;
		if(chuli[i].tag==1) insert(1,be,end);
		else ddelete(1,be,end);
//		printf("this is %d's line\n",i);
//		print_tree_llc();
		ans+=abs(tree[1].len-lasty);
//		printf("solve (2) henxian=%d shuxian=%d ans=%d\n",qq,abs(tree[1].len-lasty),ans);
//		system("pause");
		lastx=chuli[i].x;
		lasty=tree[1].len;
		
	}
	return ans;
}
int main()
{
	int num,i,ax,ay,bx,by;
	scanf("%d",&num);
	for(i=1;i<=num;i++)
	{
		scanf("%d%d%d%d",&ax,&ay,&bx,&by);

		shuru[2*i-1].tag=1;//左邊
		shuru[2*i-1].x=ax;
		shuru[2*i-1].y1=ay;
		shuru[2*i-1].y2=by;

		shuru[2*i].tag=-1;
		shuru[2*i].x=bx;
		shuru[2*i].y1=ay;
		shuru[2*i].y2=by;
	}
	init(2*num);
	printf("%d\n",solve(2*num));
	scanf("%d %d",&num,&num);
	return 0;
}
*/

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define MAX 10000

struct node
{
	int be,end,pos,tag;
}rect[MAX+1];

int line[2*MAX],len[2*MAX];
int b[2*MAX],e[2*MAX];
int cnt[2*MAX];
int lchild[2*MAX],rchild[2*MAX];
int lcover[2*MAX],rcover[2*MAX];
int tmp[MAX+1],aux[MAX+1];
int all,num,n;

int cmpint(const void *m,const void *n)
{
	return *((int *)m) - *((int *)n);
}

int cmprect(const void *m,const void *n)
{
	return ((struct node*)m)->pos - ((struct node *)n)->pos;
}

int search(int key)
{
	int *p;
	p=(int *)bsearch(&key,tmp+1,num,sizeof(int),cmpint);
	return p-tmp;
}

void build(int be,int end)
{
	int x=++all;
	b[x]=be;
	e[x]=end;
	cnt[x]=0;
	len[x]=0;
	line[x]=0;
	lcover[x]=rcover[x]=0;

	if(end-be>1) 
	{
		lchild[x]=all+1;
		build(be,(be+end)/2);
		rchild[x]=all+1;
		build((be+end)/2,end);
	}
}

void update(int root,int be,int end)
{
	if(cnt[root]>0)
	{
		len[root]=tmp[end]-tmp[be];
		lcover[root]=rcover[root]=1;
		line[root]=1;
	}
	else if(end-be>1)
	{
		len[root]=len[lchild[root]] + len[rchild[root]];
		lcover[root] = lcover[lchild[root]];
		rcover[root] = rcover[rchild[root]];
		line[root] = line[lchild[root]] + line[rchild[root]] - rcover[lchild[root]] * lcover[rchild[root]];
	}
	else
	{
		len[root]=line[root]=lcover[root]=rcover[root]=0;
	}
}

void insert(int root,int be,int end)
{
	if(be<=b[root] && end>=e[root]) cnt[root]++;
	else
	{
		if(be<(b[root]+e[root])/2) insert(lchild[root],be,end);
		if(end>(b[root]+e[root])/2) insert(rchild[root],be,end);
	}
	update(root,b[root],e[root]);
}

void del(int root,int be,int end)
{
	if(be<=b[root] && end>=e[root]) cnt[root]--;
	else
	{
		if(be<(b[root]+e[root])/2) del(lchild[root],be,end);
		if(end>(b[root]+e[root])/2) del(rchild[root],be,end);
	}
	update(root,b[root],e[root]);
}

void input()
{
	int i;
	int x1,y1,x2,y2;

	scanf("%d",&n);
	for(i=1;i<=2*n;i++)
	{
		scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
		rect[i].be=y1;
		rect[i].end=y2;
		rect[i].tag=1;
		rect[i].pos=x1;
		aux[i]=y1;
		i++;
		rect[i].be=y1;
		rect[i].end=y2;
		rect[i].tag=0;
		rect[i].pos=x2;
		aux[i]=y2;
	}
}

void discrete()
{
	int i;
	qsort(rect+1,2*n,sizeof(struct node),cmprect);
	qsort(aux+1,2*n,sizeof(int),cmpint);

	num=1;
	tmp[1]=aux[1];
	for(i=2;i<=2*n;i++)
	{
		while(i<=2*n && aux[i]==aux[i-1]) i++;
		tmp[++num]=aux[i];
	}
}

int solve()
{
	int sum,last,i,left,right;

	all=0;
	build(1,num);

	sum=0; last=0;
	for(i=1; i<=2*n-1; i++)
	{
		left= search(rect[i].be);
		right= search(rect[i].end);

		if(rect[i].tag) insert(1,left,right);
		else del(1,left,right);

		sum+=2*(rect[i+1].pos-rect[i].pos)*line[1];
		sum+=abs(len[1]-last);
		last=len[1];
	}
	left=search(rect[i].be);
	right=search(rect[i].end);
	del(1,left,right);
	sum+=abs(len[1]-last);

	return sum;
}

int main()
{
	input();
	discrete();
	printf("%d\n",solve());
	scanf("%d",&n);
	return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区日韩电影| 日韩亚洲欧美在线| 国产精品久久久久久久久快鸭 | 久久久久99精品国产片| 99久久精品免费看国产| 免费精品99久久国产综合精品| 中文字幕一区av| 欧美不卡视频一区| 欧美日韩在线播放| av一区二区不卡| 国产在线一区二区综合免费视频| 亚洲综合清纯丝袜自拍| 国产免费观看久久| 精品欧美一区二区久久 | 欧美一区二区在线视频| 色综合av在线| 成人精品一区二区三区中文字幕| 男男gaygay亚洲| 亚洲一级二级在线| 亚洲三级在线观看| 中文字幕乱码亚洲精品一区| 日韩精品专区在线影院重磅| 五月天激情小说综合| 欧美国产97人人爽人人喊| 日韩三级在线观看| 欧美久久一区二区| 在线看国产一区| 99国产精品久| 白白色亚洲国产精品| 极品销魂美女一区二区三区| 免费欧美高清视频| 日韩精品欧美精品| 亚洲成人资源在线| 亚洲一区二区黄色| 亚洲一级电影视频| 亚洲国产精品麻豆| 亚洲国产精品一区二区久久恐怖片| 欧美一区二区精品久久911| 欧美亚洲国产怡红院影院| 亚洲嫩草精品久久| 中文字幕一区二区三区精华液 | 石原莉奈在线亚洲二区| 久久你懂得1024| 久久先锋资源网| 日韩久久精品一区| 精品久久久久久久久久久久包黑料 | 亚洲视频免费在线观看| 中文字幕一区二区在线播放| 国产精品视频在线看| 亚洲国产精品t66y| 亚洲天堂av一区| 亚洲美女区一区| 亚洲国产欧美在线人成| 日精品一区二区| 久久精品国产99国产| 国产剧情一区二区| 成人动漫视频在线| 色婷婷精品大视频在线蜜桃视频| 色噜噜夜夜夜综合网| 欧美日韩一二区| 日韩欧美精品在线| 国产亚洲欧洲997久久综合 | 26uuu国产一区二区三区| 久久美女高清视频| 色哟哟亚洲精品| 欧美一区二区福利在线| 欧美一区二区三区白人| 精品免费一区二区三区| 日本一区二区成人| 亚洲裸体在线观看| 三级久久三级久久久| 国内精品不卡在线| aa级大片欧美| 欧美日韩国产片| 亚洲综合色网站| 亚洲成a人在线观看| 激情伊人五月天久久综合| 成人黄色电影在线| 欧美日韩www| 久久久久久毛片| 一区二区三区四区五区视频在线观看 | 激情六月婷婷久久| 91在线观看视频| 538在线一区二区精品国产| 久久久久久久久蜜桃| 一区二区在线观看免费| 久久不见久久见免费视频7| 欧美精品一区二区蜜臀亚洲| 中文字幕免费不卡在线| 午夜私人影院久久久久| 国产精品456露脸| 欧美日韩视频在线第一区| 久久蜜桃av一区精品变态类天堂 | 国产精品另类一区| 日韩高清不卡一区二区| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 亚洲va在线va天堂| 成人一区二区三区| 日韩一区二区三区四区五区六区| 国产精品免费免费| 久久www免费人成看片高清| 色丁香久综合在线久综合在线观看 | 色诱视频网站一区| 久久久精品人体av艺术| 日韩国产成人精品| 色综合欧美在线| 久久久国产精品不卡| 日韩精品一级二级| 色8久久精品久久久久久蜜| 国产亚洲一区二区三区在线观看| 亚洲成人综合视频| 亚洲国产经典视频| 日本成人在线电影网| 色婷婷国产精品久久包臀| 国产三级一区二区| 激情综合色播五月| 3atv在线一区二区三区| 处破女av一区二区| 精品伦理精品一区| 日韩国产精品久久久久久亚洲| 在线观看区一区二| 综合欧美亚洲日本| av一区二区三区四区| 国产蜜臀av在线一区二区三区| 极品瑜伽女神91| 精品噜噜噜噜久久久久久久久试看| 日韩影院在线观看| 这里只有精品电影| 丝袜脚交一区二区| 欧美精品久久久久久久多人混战 | av资源站一区| 国产精品麻豆视频| 成人影视亚洲图片在线| 日本一区二区久久| 国产99久久久国产精品潘金网站| 久久久午夜精品理论片中文字幕| 激情小说欧美图片| 久久综合九色综合欧美98| 蜜臀av亚洲一区中文字幕| 91精品国产高清一区二区三区| 偷拍与自拍一区| 欧美一区二区在线视频| 日韩精品三区四区| 精品国产一区二区亚洲人成毛片| 久久99精品久久久| 久久久亚洲精品一区二区三区| 高清不卡一区二区| 亚洲色图在线播放| 欧洲国内综合视频| 首页国产丝袜综合| 欧美成人精品1314www| 经典三级视频一区| 国产精品伦一区| 色欧美乱欧美15图片| 午夜视黄欧洲亚洲| 日韩视频一区二区三区| 8x8x8国产精品| 亚洲一二三四在线观看| 欧美日韩mp4| 日本不卡一区二区三区高清视频| 日韩精品一区二区三区视频播放 | 国产剧情一区在线| 亚洲欧美综合网| 欧美三级一区二区| 另类小说欧美激情| 国产精品欧美一区二区三区| 91免费国产在线| 日本特黄久久久高潮| 久久精品在线观看| 色八戒一区二区三区| 日韩avvvv在线播放| 久久亚洲捆绑美女| 91美女视频网站| 午夜精品国产更新| 国产亚洲成av人在线观看导航| 91免费版在线| 蜜桃视频免费观看一区| 国产精品毛片久久久久久久| 欧美日韩小视频| 国产精品羞羞答答xxdd| 亚洲男帅同性gay1069| 日韩欧美国产综合| 99精品黄色片免费大全| 蜜桃av一区二区| 国产精品美女久久久久久久| 欧美男女性生活在线直播观看| 国产麻豆91精品| 午夜精品aaa| 国产精品国产三级国产aⅴ中文| 在线播放国产精品二区一二区四区 | 亚洲国产欧美另类丝袜| 国产日韩欧美不卡在线| 欧美视频中文一区二区三区在线观看| 美国三级日本三级久久99| 亚洲欧美一区二区视频| 日韩一级精品视频在线观看| 99r国产精品| 国产精品羞羞答答xxdd| 日韩在线一区二区三区| 亚洲天堂网中文字|