試験にはいくつかのミスがあります。
- 実行制限データは、しかし、多くの場合、代わりに思考の最適化アルゴリズムの優先順位カードを取ります
- 困難の顔は、唯一の暴力ポイントを表示するには、何の夢はありません、さらに最適化するために、暴力を望んでいませんでした
A.最大か
この質問は私のアイデアについて話をここでは、八仙です。
書式#include <cstdioを> する#include <iostreamの> の#include <CStringの> に#define LL長い長い 使って 名前空間はstdを、 LL L、R。 INT メイン(){ freopenは(" maxor.in "、" R " 、STDIN)。 freopenは(" maxor.out "、" W " 、STDOUT)。 INT T; scanf関数(" %のD "、&T)。 一方、(T-- ){ scanf関数(" %LLD%LLD "、&L&R)。 LL maxor = R。 用(LL I = R; I> = L; I- = I& - I)の 場合(I- 1 > = 1)maxor = MAX(maxor、R |(I- 1 ))。 printf(" %のLLD \ n " 、maxor)。 } }
まず、rは選択する必要があり、我々は最大限にペアリングRの答えを作ることができる人を考えます。
図1は、我々は唯一の操作は、1に0となり検討する必要があるので、それには意味はありません操作が0になっていることが分かりました。
なぜ0を1にしますか?
rはいくつかの「1」、1、残りの半分が必須にする必要はありません、私たちはもっと小さい「1」にそれらを考慮することができました
0〜1、どのようにしますか?
Rのlowbitの各遷移は、次いで、rは最小、現在、元R-1 Rを除去するために、1または。
なぜそれを横断する最適なソリューションですか?
この場合、すべての役に立たない、我々はすべてのケースを無視する「1」の減少は、我々は1の増加を持っています。
だから、右にあります。
B.答え
分割部分は、私たちにインスピレーションを与えている検討して半分に分割します。
確率Pは$ 2 ^ n個$我々はいくつかのプログラムよりも多くなりたい乗じました。
そして、前半と後半のDFS、バイナリ回答半ば、およびプログラムの$ <$ = MID番号を決定します。
こちらの半分特定の単調さが上昇しないの後に私たちが半分ずつを列挙する前に、我々は単調なポインタで過去を掃引することができます。
(注)上部のその - bound'll GET 30ptsでも暴力ではない良いほど。
C.ジョイント重量変化
二つの問題の別々の答えを考えてみましょう。
最大:
私たちは、uはuの接続タップ重み値を見つけ、その後、wの接続ポイントを列挙するためにソートされ、そしてVはビットセット3員環か否かが判断され、直接、最大、休憩を取るされていないすべてのポイントを列挙する。
複雑、図中の辺の数を考慮。Mまで$ M ^ {1.5} $に、$ M ^ {0.5} $とき完全図を指している3員環の数。
わずか3員環に、我々は列挙v及びwので、最も$ M ^ {1.5} $敗北列挙し続けるときに、我々は各開始点から最大値を見つけることができます。
そして重み:
点に取り付けられた重みwは、wの中点列挙を考えると正方形は+冗長な答えです。それは冗長何?
uは等しいVです:あなたは簡単に取り除くことができます。
uとvはさらに側面である場合:すべてのトリプルは、砥石を削除しているリング。
番号を取得するにはどのようになりまし複雑プレゼントの上限3員環、$ mのソリューションの^ {1.5} $となっています。
番号と側縁の正当出発点でマークされたすべての度に応じて降順にポイント、エンド番号の数よりも少ないです。
最初の正しさは、奇妙なの無指向ビューに相当する、保証することができます。
保証方法の複雑さを考慮してください。度よりも大きい$ \ sqrtの{mは} $の点は、私たちは聞かせて、彼らがさえエッジが$ M ^ {1.5} $を超えることはありませんM、$ \ sqrtの{M} $ものを超えることはありません。
度未満$ \ sqrtの{M} $の点であり、mような点がある場合でも、それは問題で、複雑さが$ M ^ {1.5} $を超えることはありませんしません。
正しくの複雑さそう。
このように、我々は、V、W、三重ループuを列挙し、側面は$ U $$のV $の間に3員環が存在するか否かを判断することができるか否かを判断します。
しかし、$ O(N ^ 3)$ 9時から5 PTS裸の暴力は何幽霊です。