題目鏈結
看這道題的時候,題目中的借教室我們可以看作是區間修改,如果有一天不符合的話都不行,第一反應就是線段樹,維護最小值,查詢的時候看是否滿足要求,滿足的話就區間修改。以此類推,直到出現不滿足的情況。
但是由於常數問題還是要o2優化才能過,不然只有95分。
**如下:
#includeusingview codenamespace
std;
const
int maxn=1e6+7
;struct
nodetree[maxn*4
];int
n,m;
intval[maxn];
intd,s,t;
intask;
intre;
intno;
bool
flag;
int min(int x,int
y)void build(int now,int l,int
r)
int mid=(l+r)>>1
; build(now
<<1
,l,mid);
build(now
<<1|1,mid+1
,r);
tree[now].mi=min(tree[now<<1].mi,tree[now<<1|1
].mi);
}void pushdown(int
now)
}void update(int now,int l,int r,int
v) pushdown(now);
int mid=(tree[now].l+tree[now].r)>>1
;
if(l<=mid) update(now<<1
,l,r,v);
if(r>mid) update(now<<1|1
,l,r,v);
tree[now].mi=min(tree[now<<1].mi,tree[now<<1|1
].mi);
}int query(int now,int l,int
r)int
main()
else update(1,s,t,-d);
}if(flag) printf("
-1\n%d
",no);
else printf("
0\n"
);
return0;
}
NOIP 2012 借教室 線段樹
水題,但是裸的線段樹複雜度太高,要用帶標記的線段樹,第一次寫這種題,也算來打個備忘。每訪問到乙個結點就先傳一下標記,然後每次修改某個點的標記時再傳一下標記。不過我各種常數優化都試過可怎麼就第20個點還超15ms 難不成是蒟蒻光環專屬特效?include include include using n...
NOIP2012 借教室 (線段樹)
author hany01 date nov 5th.2017 include define for i j k for int i j i end k i i end i define fordown i j k for int i j i end k i i end i define set a...
NOIP2012借教室 (線段樹區間操作)
輸入檔案 classrooms.in輸出檔案 classrooms.out簡單對比 時間限制 1 s 記憶體限制 128 mb 在大學期間,經常需要租借教室。大到院系舉辦活動,小到學習小組自習討論,都需要 向學校申請借教室。教室的大小功能不同,借教室人的身份不同,借教室的手續也不一樣。面對海量租借教...