NC53370Forsaken的三維數點

2021-10-08 08:41:48 字數 1602 閱讀 8881

​ forsaken現在在乙個三維空間中,空間中每個點都可以用(x,y,z)(x,y,z)(x,y,z)表示。突然,三維空間的主人出現了,如果forsaken想要繼續在三維空間中呆下去,他就必須回答三維空間主人的問題。

​ 主人會在空間中座標為(x,y,z)(x,y,z)(x,y,z)處加一點能量值,當他加了一定的次數之後,他會問forsaken乙個問題:如果座標(0,0,0)(0,0,0)(0,0,0)為球心,那麼至少需要多大的半徑才能使得球內的能量值總和大於或者等於kkk,在這裡,半徑為000也是可以的。這對於forsaken來說實在是太難了,因此他把這個問題交給了你。

第一行乙個nnn表示操作的次數。

接下來每行首先乙個整數opopop表示操作的種類。

如果op=1op = 1op=1,接下來333個整數x,y,zx,y,zx,y,z表示能量值增加的座標。

如果op=2op =2op=2,接下來乙個整數kkk表示要求的能量值總和。

對於每個op=2op=2op=2的操作,輸出乙個整數表示球的半徑。(資料保證至少有乙個222操作)

如果沒有滿足答案的半徑,輸出−1-1−1。

題目要求是求空間內球體的半徑多長時可以符合能量值大於等於k的情況,這個時候由於輸出的是乙個整數,也就是這個整數是來表示半徑的。

再加上題目求的是區間和,所以考慮樹狀陣列。

接下來為了使能夠構成樹狀陣列,在半徑可以回答0的情況時是無法構成樹狀陣列的,因為樹狀陣列是到達1處時求和就結束的。

所以我們給求出的每個半徑都+1就可以構成樹狀陣列了。

然後二分判斷情況。

#include

#define inf 0x3f3f3f3f

#define dof 0x7f7f7f7f

#define endl '\n'

#define mem(a,b) memset(a,b,sizeof(a))

#define debug(case,x); cout<#define open freopen("ii.txt","r",stdin)

#define close freopen("oo.txt","w",stdout)

#define io ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)

#define pb push_back

using

namespace std;

#define int long long

const

int maxn=

1e6+10;

int k;

int d[maxn]

;inline

intlowbit

(int x)

void

add(

int x,

int y)

}int

get_sum

(int x)

return ans;

}signed

main()

else

else

else l=mid+1;

} cout<}}

二維數 三維陣列

二維陣列 2017 11 10 對比 1 概念 一維陣列 存貯一組相同型別資料 二維陣列 存貯著多個一維陣列 類推 三維陣列 存貯著多個二維陣列 2 宣告 一維陣列 陣列型別 陣列名 初始值 int arr01 int arr00 new int 5 二維陣列 陣列型別 陣列名 初值 陣列型別為一維...

php三維陣列取數例項

data 把json資料轉化為array陣列 result json decode data,true 把三維陣列轉化為二維陣列 foreach result as table var dump arr 取出列為kf account的陣列 foreach arr as key value var d...

三維座標 偏轉 三維座標下的旋轉

三維座標的旋轉有以下幾種常見的表示形式 旋轉向量,旋轉矩陣,尤拉角,四元數,下面對這四種表示形式及其之間的轉換進行介紹 旋轉向量 通常為3x1的列向量,向量方向即為旋轉軸,向量的模表示繞軸逆時針旋轉的角度,如旋轉向量v a,b,c 那麼旋轉角度theta sqrt a2 b2 c2 旋轉軸z a t...