看了解題報告之後知道就是乙個儲存歷史狀態的樹狀陣列,儲存了以前時間的修改
然後查詢乙個操作時間的時候,在進行sum的時候每次都要找這個區間<= t的最大的時間修改的值,然後全部加起來
找<=t的最大時間的時候要用二分……不然會超時
這題是個空間和時間都很多的題……挺麻煩的不過也是有點收穫,在時間上利用樹狀陣列,記錄每個區間被修改都要新標記一次
#include#include#includeusing namespace std;
const int maxn = 1000010;
struct st
st()
};int n,q;
vectortree[maxn];
int cur[maxn];
int count (int x,int time)
else
} return tree[x][left].v;
}int count2(int x,int time)
return tree[x][ans].v;
}int lowbit(int x)
int sum(int x,int time)
return ret;
}void add(int x,int d,int time)
}int main()
for(int i = 1; i <= q; i++)
else
else
} } return 0;
}
c 如何儲存樹的展開狀態
前提 每個node有唯一標識的東東,我的示例中展現的是資料夾,每個tooltip是檔案 資料夾的路徑。不同的唯一標識的話,把關於tooltip的相關方面更改即可 private list listvisiblenodes new list private string lastselectednod...
天梯賽真題 樹的遍歷 遞迴
此題紀念一下一點都不擅長遞迴的我,非要用遞迴的方法來做,靠自己的力量,經過兩個小時最終成功的勵志故事!題意 給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。輸入格式 輸入第一行給出乙個正整數n 30 是二叉樹中結點的個數。第二行給出其後序遍歷序列。第三...
2018湘潭邀請賽C題(主席樹 二分)
比賽的時候知道這題是用主席樹 二分,可是當時沒有學主席樹,就連有模板都不敢套,因為 實在是太長了。題意 給你一些數字,要求你某些區間中找到乙個h index。每次查詢h index複雜度不能超過o n h index的定義是 有最少h個數不小於h,找到最大的h。分析 假如查詢的區間長度為n,那麼an...