二維座標中乙個移動矩形塊中的最大和值

2021-06-21 22:02:05 字數 1141 閱讀 5240

題意: 在乙個二維座標中有很多個點,每個點有個權值。

給出乙個矩形框的寬與高,移動該大小的框,

把所有在框內的點的值加起來得到乙個和,最該最大的和值。

資料有最多100000個點,

思路:把座標點從下到上,從左到右排序。

把橫座標的點記錄一下,看有哪些點,並排序去重。

loop:

加入每個點,更新這個點應該在橫座標上的值。

去掉縱座標與當前點縱座標距離過大的點

打最大值。

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

#define n 100100

int n,w,h;

struct my

go[n];

int hi[n],len;

struct tree

t[4*n];

int p[n];

bool cmp(my a,my b)

}void update(int cur,int left,int right,int v)

int m=(t[cur].left+t[cur].right)>>1,l=cur<<1,r=cur<<1|1;

if (t[cur].m!=0)

if (right<=m) update(l,left,right,v);

else if (left>m) update(r,left,right,v);

else update(l,left,m,v),update(r,m+1,right,v);

t[cur].mm=max(t[l].mm,t[r].mm);

}int main()

{ freopen("in","r",stdin);

int i,j,k;

int x,y,w;

int ans=0;

cin>>n>>w>>h;

for (i=0;i=0;--i)

{while (j && hi[i]-hi[j-1]= h) update(1,p[ind[go[j].x]],ind[go[j].x],-go[j].w),j++;

ans=max(ans,t[1].mm);

// cout<

判斷乙個二維陣列的資料是否在另外乙個二維陣列裡重複

當我最先碰到這個問題是工作中批量匯入資料,防止裡面有資料跟資料庫裡原有的重複。大多數人想到的是挨個迴圈對比,感覺這樣速度有點慢,所以根據php函式來解決的 new cand idcard array column cands,cand idcard array column 先把要匯入的二維陣列,根...

在乙個二維陣列中查詢乙個整數

題目描述 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。解題思路 在乙個陣列中查詢乙個整數,只有兩種情況在或者不在,由題可知左上角元素值最小,右下角元素值最...

乙個二維陣列的排序

一維陣列的補充 foreach 使用foreach迴圈遍歷陣列和集合元素時,無須獲得陣列和 集合的長度,無須根據索引來訪問陣列元素和集合元素,系統自動遍 歷陣列和集合的每個元素。for string name names 等同於for int i 0 i 多編寫時候的麻煩。老師講完這個後自己寫了乙個...