ditoly出的題目果然喪,待我一天啃一題。。。。。
廢話不多說,開更:
————————————————————我是分割線——————————————————
t1:最大值(max)
【問題描述】
小c有n個區間,其中第i個區間為[li,ri],小c想從每個區間中各選出乙個整數,使得所有選出的數and起來得到的結果最大,請你求出這個值。
【輸入格式】
第一行乙個正整數n,表示區間個數。
接下來n行,每行兩個非負整數li,ri。
【輸出格式】
輸出乙個整數,表示答案。
【樣例輸入】
1 34 6
【樣例輸出】
【資料範圍】
對於資料點1~2,sum(ri-li+1)(1<=i<=n)不超過
10^7
;對於資料點3~4,存在乙個
x滿足對於每個區間,
li<=x<=ri
;對於資料點5~6,
n=2;
對於資料點7~8,
ri<=10^5
;對於全部資料(1~10),
n<=10^5
,li<=ri<=10^18
。————————————————————我是分割線——————————————————
神奇題目emmmmm
我們先要明白乙個事情,那就是假如說我們從大到小列舉i,如果所有的區間在二進位制下第i位都可以取到1,那麼顯然這個1一定作為答案
那麼我們怎麼處理接下來的區間呢?
我們分情況討論,假如說所有的區間在目前的第i位都可以取到i,那麼列舉每乙個區間,假如目前區間的左端點不能取到1,那麼我們就把li賦值為0,因為我們的判斷是靠ri判斷的,不影響答案。表示我們後面的數都可以取到0,而這樣做可以證明不會使答案變得更劣。
那麼如果不能滿足所有的區間都取到1,那麼我們繼續分情況討論:
如果所有的區間這一位都只能取到0,那麼就取0
否則如果有的區間可以取0,有的區間可以取1,那麼我們顯然取0,因為取1&之後還是0,而取0之後1~i-1位都可以取1,一定最優。所以我們把滿足這種條件的區間的右端點設為(1<
然後就是貼**啦!
#include#define mn 100005long
long
l[mn],r[mn],ans;
intmain()
else
for(j=1;j<=n;++j)if((l[j]&(1ll<60)-1
; }
printf(
"%lld\n
",ans);
fclose(stdin);
fclose(stdout);
}
————————————————————我是分割線——————————————————
四校聯考 20171001
二分 期望得分 70 實際得分 10 列舉最高的高度可能為多少 二分。o logm 列舉最高高度應該位於哪一列上.o n 左右擴散列舉出需要用的積木總數,與m相比較。容易發現合法的高度的最高值,最終需要搭建乙個金字塔。1,3,5,7 正解是預處理出每一列作為最高列的左右邊界。然後再二分最大高度。ch...
四校聯考 傳遞
題解 如果乙個圖是競賽圖那麼如果存在邊,那麼a一定能走到b,反之亦然 還有,如果在圖p中存在邊,那麼圖q中一定不存在邊或 基圖是完全圖 那麼,如果圖p中存在邊,圖q一定不能從a走到b或者從b走到a 既然如此,因為圖p 圖q是完全圖 所以,對於點u和點v,u和v之間的邊要不然在p裡,要不然在q裡,所以...
四校聯考 點
題目描述 有n個點,初始時沒有邊。有m個操作,操作分為兩種 1 在i和j之間增加一條無向邊,保證1 i,j n。2 刪去最後新增的k條邊,保證k 當前邊數。你想要知道最多能選取多少個兩兩不連通的點,以及選取的方案數。在每次操作後輸出這兩個值。方案數對998244353取模。輸入資料 第一行兩個整數n...