NOIP2012 借教室 線段樹

2022-03-17 23:21:21 字數 1322 閱讀 5115

題目鏈結

看這道題的時候,題目中的借教室我們可以看作是區間修改,如果有一天不符合的話都不行,第一反應就是線段樹,維護最小值,查詢的時候看是否滿足要求,滿足的話就區間修改。以此類推,直到出現不滿足的情況。

但是由於常數問題還是要o2優化才能過,不然只有95分。

**如下:

#includeusing

namespace

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;

}

view code

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 在大學期間,經常需要租借教室。大到院系舉辦活動,小到學習小組自習討論,都需要 向學校申請借教室。教室的大小功能不同,借教室人的身份不同,借教室的手續也不一樣。面對海量租借教...