分治:
分割し、分割統治、分割統治を征服、分割統治法には、いくつかの小規模な問題には大きな問題であり、それらを解決し、最終的にはサブ問題を解くことによって、全体的な問題を解決します。
除算を使用し、主に二つの側面にOIでアルゴリズムを征服します:
バイナリ検索に基づいて、使用の三分の二を見つける1
2.タイトルの使用は、より細かい部分問題に分割して
私たちは、オーダーのこれらの二つの側面を説明します
ハーフ -
二部性質がある:もう一方の側が満たされない間の境界内で決定ソート範囲は、要素の境界面は、特定の特性を満たします。
そのため、以下の2点が、多くの場合、問題の種類を使用している解決するために:
1.単純なバイナリ検索
2.バイナリ回答(すなわち、特定の特性を満足する最大の価値を求めているの単調関数)
3.最も値の最も値(ハーフタイトルの最も一般的なタイプ)
ハイレベルから半分を理解します:
これは、実際にバイナリ決定境界です。
二分法は、秩序必要とサイズを注文することができ、それはまた、他の奇妙な問題であることができます。
最も値が最も値:最大最小値、最小最大=>半分=>優秀な書き込みをしたいです。
バイナリテンプレート:
私は本当に書き半分の話が好きではありません
教室によってNoip2012
ディファレンシャルを使用する接頭次いで、マーキング考え日によって再び教室の数を取得し、O(N + M)。
次に、2つの点、O(n)の合法性qwqを比較
プラスライン無知な力
突然、アムウェイのウェブサイト:
U 1〜範囲内NUM、番号xで割り切れること数。
V 1〜範囲内NUM、割り切れるyは数。
W 1〜NUMの範囲内において、X * yは、数で割り切れる数です。
Oの複雑さ(ログ] 3/2 N)
EPS:
まず言う:1E-8は10 ^ -8です。
非単峰性の関数:
各ピークを切り出し、その後、最適を求めるの各部分、
限り、あなたは十分に薄く切って、そのそれぞれがピークで、それをピークカットする方法
LEN:各セグメントの長さ
ブロック -
アレイ、約√N長さのそれぞれの第1のサブブロック長nを√N。
1.シンプルなアイデア、暴力。
Lは、ここでどの一つにおいて、R見つけます
ケース1:L、同じ複雑さで、RはO(√N)を超えません
2:L、O(2√n)以下での複合体中の隣接ブロック中のR。
3:L、距離からのR、L、Rは、残りの中間ブロックをマーキング、ブロック計算される; O(√N)ブロックを再生するまで。
2.ソート神々のORZ
ブロックブロック内のデータをソートする最初のブロック、,;
クエリ:
- 暴力のためにO(√N)で同じトランシェに
- 隣接ブロックのO(2√n)
- 非隣接。
首先在a数组中查询左端点l所在块中,l右侧有多少满足的
同理右端点r也跑一下;
然后对于中间的块,每一个块都在b数组中跑一个二分就好了呢qwq
暴力加加在a上,然后再排序;其他的与1的加相同;
修改:先将l所在块和r所在块进行暴力并且在b数组中重新排序,其他中间的块打标记,当查询这个块时,不再查询x,而是查询 x-此块打的标记;
3.精髓:一个long long的整数最多开方6次,0开方为0,1开方为1;
先分块,对区间分√n块,每次开方时,for l~r,全部开方,当某个块只有0或1时,打个标记,就不用再开方了;
复杂度:O(6n);
记录离当前颜色最近的相同颜色的球的位置;
最后一句查询可以用2来做
修改:对每个颜色维护一个set;
把每个颜色丢进去;????
要满足于代码短,代码优秀;
搜索:
最短路=>广搜
求所有解=>深搜 干净代码+清晰思路
广搜的节点要开多一点;不要如此吝啬;
一般用于求最优解
轮次搜:
q0和q1交替搜索,然后直到交头;会减少垃圾节点;
迭代加深搜索:
搜到d层就不搜了,如果没有解,深度d++;
适合很深很宽的搜索树;
枚举完深度,选用深搜
开始连接:https://www.cnblogs.com/zhuier-xquan/p/10991869.html
当你觉得题面很复杂,数据范围又很小,考虑搜索;
莫得剪枝↑
剪枝1:现在体积超过n,无需再跑,直接return;
剪枝2:当前算的表面积比我们目前求得最优解大,return;
强夸剪枝二!