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 額外空間並 原地 修改輸入陣列。元素的順序可以改變。你不需...