#include #include #include #include #define lson rt<<1
#define rson rt<<1|1
using namespace std;
int h,w,n;
const int maxn = 200000+10;
int tree[maxn<<2];
void pushup(int rt)
void build(int rt,int left,int right)
int query(int data,int rt,int left,int right)
int mid=(left+right)>>1;
int ans;
if(tree[lson] >= data) ans = query(data,lson,left,mid);
else ans=query(data,rson,mid+1,right);
pushup(rt);//在查詢中修改
return ans;
}int main(){
while(scanf("%d%d%d",&h,&w,&n)!=eof){
int x;
if(h>n) h=n;//由於是每乙個至少都是1,所以如果我們的h>n了,我們就沒必要組織乙個很大的線段樹了
//維護值:區間中下屬的最大值
build(1,1,h);
for(int i=0;i
2016夏季練習 線段樹
解釋在 注釋裡 include include include include using namespace std 由於題目中明確後輸入的y一定更大 也就是認為後輸入的其實對於我們的尋找和排序實際上沒有什麼影響 這樣我們就可以進行具體的查詢 const int maxn 32000 10 int...
2016夏季練習 dp
首先第乙個是知道了我們的dp原來是有可能用搜尋來進行推演和解釋的,之前一直以為是遞推的。第二個樹形dp的確是第一次看見,所以還是需要多多學習。先來解釋一下這個題目 選乙個樹的非聯通最大子集,其中資料是有權值 tree like dp include include include include u...
2016夏季練習 dp
對於影響因素的個數來判斷需要的維度,根據狀態的多少來開闢陣列 對於各個狀態進行乙個比較,注意使用壓縮的方法對於問題中的所有東西進行優化 include include include using namespace std int n,m const int n 100 5 const int m ...