題意: 在乙個二維座標中有很多個點,每個點有個權值。
給出乙個矩形框的寬與高,移動該大小的框,
把所有在框內的點的值加起來得到乙個和,最該最大的和值。
資料有最多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 多編寫時候的麻煩。老師講完這個後自己寫了乙個...