Offer收割 程式設計練習賽10 C 區間價值

2021-09-29 18:57:19 字數 1045 閱讀 6554

【題目鏈結】:

【題意】

中文題

【題解】

二分最後的答案;

二分的時候;

對於每乙個列舉的值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 ...