input file: area.in
output file: area.out
time limit: 2 seconds
memory limit: 256 mb
給出n 個矩形,求它們的面積並.
更準確一點,每個矩形將給出它的左上角和右下角的位置:x1; y1; x2; y2
這四個數都是整數且滿足x1 x2; y1 y2.
我們需要你求:
area =j f(x; y) 2 z z j 9 a rect: s:t: x1 x x2 and y1 y y2g j
input
第1 行1 個整數:n,表示矩形的個數。
接下來n 行,每行4 個整數:x1 y1 x2 y2,表示乙個矩形的左上角和右下角的座標。
output
輸出area。
sample
area.in
31 1 2 3
1 2 3 3
3 3 4 4
area.out
11 樣例解釋:一共有11 個點落在了上面三個矩形所表示的區域內:
(1; 1); (1; 2); (1; 3); (2; 1); (2; 2); (2; 3); (3; 2); (3; 3); (3; 4); (4; 3); (4; 4)
note
• 對於30% 的資料,1 n 100,1 x1 x2 100,1 y1 y2 100
• 對於100% 的資料,1 n 105,1 x1 x2 105,1 y1 y2 105
掃瞄線,對於乙個舉行(x1,y1,x2,y2),將它看成兩個事件:在x1 這個時間將
(y1,y2) 這個區間加一,在x2+1 這個時間將(y1,y2) 這個區間減一。
這樣,我們遍歷整個時間,並在執行完這個時間的操作後看看有多少位置非
0, 將其數量加到答案中,就完了,當然時間不能傻傻地乙個乙個枚,因為關鍵
的時間點最多2n 個,其它時候面積是沒有變的,所以要一段一段地算。
至於怎麼用線段樹實現那麼檢視有多少個非零的位置,需要注意對於任何一
個減一操作,前面一定有乙個和它一樣的加一操作,就只需要維護一下每個節
點被完全覆蓋的次數。再用另乙個來統計子樹中的那些修改導致這個節點還有
多少個非零。有點像標記永久化(我們講的第二種區間修改的寫法)。
#include
#include
using namespace std;
const int n = 100000 + 10;
typedef long long ll;
inline int
read()
while( ch >= '0' && ch <= '9' )
return
x*f;
}struct event
event( int type, int
time, int lf, int rg )
:type(type),time(time),lf(lf),rg(rg){}
};bool operator<( const event &r, const event &s )
struct node
void update( int lf, int rg )
}pool[n*2], *tail = pool, *root;
int n,total;
event events[n*2];
node *build( int lf, int rg )
return nd;
}void modify( node *nd, int lf, int rg, int l, int r, int delta )
int mid = (lf + rg) >> 1;
if( l <= mid ) modify( nd->ls, lf, mid, l, r, delta );
if( mid < r ) modify( nd->rs, mid+1, rg, l, r, delta );
nd->update(lf,rg);
}int main()
std::sort( events, events+total );
root = build( gu, yu );
ll ans = 0;
for( int i = 0,j; i < total; i = j + 1 )
printf("%i64d",ans);
return
0;}
20170117 機房 練習賽
現代科學,面廣枝繁,不是一輩子學得了的。惟一的辦法是集中精力,先打破一缺口,建立一塊或幾塊根據地,然後乘勝追擊,逐步擴大研究領域。此法單刀直入,易見成效。王梓坤 我熱愛生活,我是一名快速成長的oier include include include define program name color...
機房練習賽 Dinner
本來看到這道題的第一想法是環形區間dp的,但是模擬完樣例我就恍然大悟,在10的時間內可以同時讓1,5點完餐,那不就是找最大值得最小值嗎?然後就是二分答案了,二分最少時間。然後就是我的玄學check 我在考試的時候是想到了變成二倍鏈在區間上處理的,但我直接o n 處理了每個區間的和不大於x的塊,然後列...
機房練習賽4 3 drive
input file drive.in output file drive.out time limit 2 second 工頭cky 最近開了一家 公司,開始經商。作為cky 的忠實小弟,jyb 當了cky 老總的司機。一天晚上,cky 突然找到了乙個新的客戶,所以第二天一早要急著從成都去上海談生...