【題目鏈結】:
【題意】
中文題
【題解】
二分最後的答案;
二分的時候;
對於每乙個列舉的值x;
計算小於等於它的值(對應了若干個區間,且這些區間裡面,每乙個區間的價值(相同對數)都小於等於x)的區間個數ju;
如果ju>=k,則可以再變小一點,同時先記錄ans=mid,否則數字變大一點;
計算小於等於x的區間個數;
可以用尺取法;
如果 l..r這個區間的值是符合要求的即區間價值≤x;
則 l+1..r
l+2..r
l+3..r
… r..r
這r-l+1個區間肯定也是符合的;
然後右端點往右走;
新增加的區間價值,可以通過新增加的數字是什麼,然後看看前面有多少個數字和它一樣,通過o(1)算出來新的區間價值;
然後如果區間價值大於x了,則遞增左端點;改變減少的數字的個數;減小區間價值;balabala
【number ofwa】
0 【完整**】
#include
using
namespace
std;
#define rep1(i,x,y) for (int i = x;i <= y;i++)
#define ll long long
const
int n = 2e5+100;
ll k,tot,a[n];
int num[n],n;
map dic;
ll ju(ll x)
xyx+=i-l+1;
}return xyx;
}int main()
ll l = 0,r = 1ll*n*(n-1)/2,ans = 0;
while (l <= r)
else
l = m+1;
}cout
<< ans << endl;
}return
0;}
Offer收割 程式設計練習賽1
做了三題,題目都比較暴力。a題 題意 給你乙個三階的幻方,三階幻方指的是將1 9不重複的填入乙個3 3的矩陣當中,使得每一行 每一列和每一條對角線的和都是相同的。現在準備將乙個三階幻方中的一些陣列抹掉 0代替 交給你來進行還原,並且希望她能夠判斷出究竟是不是只有一組解。如果只有一組解,輸出該三階幻方...
Offer收割 程式設計練習賽7
比較容易想到是o n 2 的解決方案,遍歷n種刪除可能,每次遍歷o n 時間求總高度。前者優化比較困難,因而想辦法優化每次遍歷求高度的時間。由前往後遍歷,當刪除第i個時,先前的排版是連續的,從而通過計數器等累加方法可以求得已完整行的總高度presum,以及當前未完整行的w,h。include def...
Offer收割 程式設計練習賽26
題解 按照條件求解出最大的三角形和最小的三角形,然後求重心即可。這裡求解面積有兩種方法 海 式 p p a p b p c 將三角形的每一條邊求解出來,然後進行處理 用有向向量進行計算,如果設a x0,y 0 b x1,y 1 c x2,y 2 三點為三角形三個頂點,a 為有向面積,那麼2a x0 ...