POJ3416 二維座標軸下離線樹狀陣列

2021-10-01 09:18:31 字數 1426 閱讀 7675

t組 n和m   n個硬幣的座標+m個假定中心原點的座標 

求每個中心座標對應的一三象限和二四象限上硬幣數量的差  保證座標軸上無硬幣

對硬幣和中心點分別以x軸從小到大sort

建立兩棵樹狀陣列 分別表示當前點的左半邊 和 右半邊 的點的縱座標

顯然,初始所有點的縱座標記錄到 右半邊r。

按照x座標從左到右列舉中心點的橫座標 同時修改這一段的點的縱座標在兩個樹狀陣列裡的對應值 getsum求ans

#include#include#include#include#include#includeusing namespace std;

const int maxn = 5e4 + 5;

const int maxnn = 5e5 + 5;

typedef long long ll;

int t,n,m;

struct nodea[maxn],a[maxn];

int l[maxnn],r[maxnn],ans[maxn];

bool cmp(node p,node q)

int lowbit(int k)

void add(int *tree,int k,int ad)

}ll getsum(int *tree,int k)

return sum;

}int main()

scanf("%d %d",&n,&m);

for(int i = 1;i <= n; i++)

for(int i = 1;i <= m; i++)

sort(a + 1,a + 1 + n,cmp);

sort(a + 1,a + 1 + m,cmp);

//from the begin (0,0) all point aren't set

//init:

for(int i = 1;i <= n; i++) add(r,a[i].y,1);

int st = 1,j = 1;

for(int i = 1;i <= m; i++)

//鎖定在當前中心座標左邊的點

for(int k = st;k <= j - 1; k++)

int one_three = getsum(r,maxnn - 4) - getsum(r,a[i].y) + getsum(l,a[i].y);

int two_four = getsum(l,maxnn - 4) - getsum(l,a[i].y) + getsum(r,a[i].y);

ans[a[i].id] = abs(one_three - two_four);

st = j;

} for(int i = 1;i <= m; i++) printf("%d\n",ans[i]);

if(t)printf("\n");

}}

VTK二維座標軸的兩種建立方式

vtkxyplotactor繪製座標軸。座標的 可以是輸入的點集,也可以通過探測面輸入。探測面,只要在建立的物件內選擇addinput 函式即可,然後按自己的要求慢慢設定。輸入的點的資料,可以通過如下 這裡要說明的是,這種建立方式的座標軸x,y並不是按照輸入點對應的,而是對應點的id。如果要設定對應...

三維座標轉換為二維座標

最近做專案用到三維座標轉換為二維平面座標的轉換公式。看了網上的很多資料,都不太適用自己的專案。最後決定自己來推導。如下圖所示,將二維平面上的三維座標系o x y z 轉換為二維座標系o xy。利用推導出的公式,在二維平面上繪製出三維立體圖。假設在三維座標系中有一點a x y z 轉換為二維座標系中的...

二維座標離散化

離散化的思想就是將分布大卻數量少 即稀疏 的資料進行集中化的處理,這樣可以有利於程式的空間與時間,能減少遍歷次數與空間儲存。然而雖然我會了思想今天問了翔神半天才知道怎麼實現。其實實現的方式與口述的角度還是有所不同。思想理解起來其實道理很簡單,如座標 3,2000 10005,31 10006,5 離...