const
int n =
2e5+5;
int n , m;
ll a[n]
;struct node
tr[n <<2]
;void push_up (
int i)
void build (
int i ,
int l ,
int r)
int mid =
(l + r)
>>1;
build (i<<
1, l, mid)
; build (i<<1|
1, mid +
1, r)
; push_up (i);}
void push_down (
int i)
}int querypos (
int i ,
int l ,
int r, ll y)
void update (
int i ,
int l ,
int r,
int l ,
int r, ll y)
push_down
(i);
int mid =
(l + r)
>>1;
if(l <= mid) update (i<<
1,l,mid,l,r,y);if
(r > mid) update (i<<1|
1,mid+
1,r,l,r,y)
;push_up
(i);
}ll getsum (
int i ,
int l ,
int r,
int l,
int r)
ll cost;
int query (
int i ,
int l,
int r)
push_down
(i);
int mid =
(l + r)
>>1;
if(tr[i<<1]
.minn <= cost)
ans +
= query (i<<
1, l, mid);if
(tr[i<<1|
1].minn <= cost)
ans +
= query (i<<1|
1,mid+
1,r)
;return ans;
}int main (
)else
}return0;
}
解題思路:本題通過簡單分析,通過rmq查詢區間最值,通過列舉x之後,發現區間的單調性從而使用兩次二分求解
const
int n =
2e5+5;
int n, t, a[n]
;int maxn[n][30
], minn[n][30
];void
getst()
}int
rmq(
int l,
int r,
int op)
int main ()}
}if(mid1 !=-1
)break;}
if(mid1 !=-1
)printf
("yes\n%d %d %d\n"
,mid1,mid2-mid1,n-mid2)
;else
printf
("no\n");
}}
解題思路:本題有乙個性質:答案一定包含眾數,可以感性理解一下(擴張思維),然後就可以列舉搞了,這裡一定要用unordered_map不然會tle
const
int n =
2e5+5;
int n;
int a[n]
;int buck[n]
, cnt, val;
unordered_map <
int,
int> ma;
int main ()if
(cnt >1)
cout << n << endl;
else
} cout << ans << endl;
}}
解題思路:正常來說,是很容易想到o(n
2k
)o(n^2k)
o(n2k)
的分組揹包,可惜時間不夠acac
ac不得,於是我們觀察題目,發現有乙個很特殊的點,每個棧是單調棧。那麼從網上的結論可知,選擇的序列,僅存在乙個選不滿,然後,用線段樹分治的策略搞一搞就好了
const
int n =
3005
;int n , k;
int l[n]
;vector sum[n]
;ll dp[n]
, ans =0;
void solve (
int l ,
int r)
int mid =
(l + r)
>>1;
ll cpy[n]
;for
(int i =
0; i <= k ; i ++
) cpy[i]
= dp[i]
;for
(int i = mid +
1; i <= r ; i ++
) solve (l , mid)
;for
(int i =
0; i <= k ; i ++
) dp[i]
= cpy[i]
;for
(int i = l ; i <= mid ; i ++
) solve (mid +
1, r);}
int main ()}
solve (
1, n)
; cout << ans << endl;
}
資料結構刷題 剪枝
在刷題中會遇到,比如二叉樹問題中會遇到剪枝的問題,我們需要,研究一下什麼是剪枝 剪枝可謂是搜尋的靈魂所在,我們知道搜尋是個愣頭青小伙,一路撞到底可能都撞不到答案,他還可能要撞很多次。所以有什麼方法可以讓他撞的次數少一點呢?我們知道搜尋會形成乙個搜尋樹,這其中有很多的枝杈,但是他們中許多其實是無用或者...
資料結構刷題 陣列
給定乙個矩陣 a,返回 a 的轉置矩陣。先建立乙個與原始矩陣行列數互換的新矩陣 做兩個迴圈巢狀,內迴圈遍歷原始矩陣的行轉列,外矩陣遍歷原始矩陣的列 class solution return v 逐行的細緻解釋 vector 建立了二維陣列,兩個空格可以在c 11標準中可以剔除 a 0 size 獲...
LeetCode刷題目錄 資料結構
160.相交鍊錶 21.合併兩個有序鍊錶 83.刪除鍊錶中的重複元素 19.刪除鍊錶中倒數第k個節點 22.鍊錶中倒數第k個節點 24.兩兩交換鍊錶中的節點 445.兩數相加 234.回文鍊錶 755.分隔鍊錶 328.奇偶鍊錶 1.關注頭尾結點的處理,什麼時候需要虛擬頭節點,什麼時候不需要 2.判...