北航OJ刷題

2021-09-05 12:21:09 字數 1749 閱讀 8843

bamboo聽說知道了正確的玲瓏數,就能開啟玲瓏陣,穿越時空,然後解鎖乙個滿分瑪麗蘇cp……

於是決定停止幻想,現在就去算玲瓏數。

玲瓏數是什麼呢?

在數列中任意兩個數a[i],a[j],如果i2*a[j],那麼a[i]和a[j]就構成了一對兒玲瓏對。玲瓏數就是玲瓏對的總數。

是不是聽起來很簡單?快幫bamboo算一下玲瓏數是多少吧!

多組輸入資料

輸入的第乙個數是正整數n,表示陣列長度,0接下來n個正整數是陣列an,均在int範圍內。

然後是正整數t表示t次查詢 ,0< t<1000

接下來t行,每行兩個數p和q,代表查詢的陣列下標區間 0<=p每次查詢輸出一行,為所求區間內的玲瓏數。

3

3 2 1

10 2

1
第一反應就是這道題很像「序列優美差值」那道題,應該可以用分治法解決。把陣列分成兩a,b兩部分,那麼a部分裡的數,下標一定小於b內的數,滿足條件i/*注意由於涉及到多次查詢,不能直接操作a陣列,這會改變某一區間內的元素排列順序,所以要將查詢

的區間提取出來,這卡了我好一會*/

#include

#include

#include

#include

using

namespace std;

void

msort

(int l,

int r)

;void

merge

(int l,

int r)

;long

long ans=0;

long

long a[

10004];

long

long b[

10004];

long

long a[

10004];

int n,t,p,q;

intmain()

scanf

("%d"

,&t)

;for

(int i=

1;i<=t;i++

)int k=1;

for(

int j=p;j<=q;j++

)msort(1

,q-p+1)

;printf

("%lld\n"

,ans);}

}}void

msort

(int l,

int r)

void

merge

(int l,

int r)

ans+

=(st-

1-mid);}

//下面是,正常的歸併排序

int x = l, y = mid +

1, i = l;

while

(x <= mid && y <= r)

for(

int k = y; k <= r;

++k) b[i++

]= a[k]

;for

(int k = x; k <= mid;

++k) b[i++

]= a[k]

;for

(int i = l; i <= r;

++i) a[i]

= b[i]

;}以後我會爭取每天都至少更新一道題,主要是為了以輸出的形式,獲得知識和技能的輸入。第一次寫部落格,寫的不好的地方,還請多多見諒。

各大刷題OJ

簡介 以求職為主導的oj 力扣 推薦指數 很多網際網路大廠筆試都是上面的原題,題目有easy midium,hard三個層次,平台有國內版和海外版 安利國內版 力扣會定期舉辦周賽,雙周賽,力扣春季賽等比賽。平台互動性很高,強烈建議多看看題解 討論區。115 l l 洛谷 推薦指數 這是乙個日本的oj...

OJ刷題總結

注意末行是否需要輸出空行,有的不管輸出與否都正確。但有的輸出就錯了,而特麼有的輸出才正確。有關re的思路 指標越界了,除數為0了 用sort 排序會對元素的相對位置發生改變。他的cmp 函式中,如果返回true就不交換,false就交換。bfs中要記得寫vis陣列表示訪問過的狀態。而且,一定要在能訪...

OJ 陣列相關OJ刷題

1 原地移除陣列中所有的元素val,要求時間複雜度為o n 空間複雜度為o 1 給你乙個陣列 nums 和乙個值 val,你需要 原地 移除所有數值等於 val 的元素,並返回移除後陣列的新長度。不要使用額外的陣列空間,你必須僅使用 o 1 額外空間並 原地 修改輸入陣列。元素的順序可以改變。你不需...