poj 3067

2022-08-05 18:27:11 字數 738 閱讀 4170

學長講完線段樹,樹狀陣列後讓我們做的題,但是看完題目,感覺用線段樹沒什麼想法,然後n,m都只有1000這樣的話,o(n*m)是可以過的,然後就直接開始做了:

大體思路:第一行1-n開始算,表示這個節點與之前的所有線最多形成了多少個crossing,然後開始加一個節點,一直加到第m個節點。每一個節點crossing的計算方法是,從第二行的最右邊開始更新,更新到第一個點。

下面是ac**:

#include #include #include #include #include #include #include using namespace std;

const int maxn = 1005;

long long a[1005],b[1005];//a[i]表示更新到第一行第i個節點,第i個節點連的所有線形成的crossing,

//b[j]表示更新到第二行第j個節點,**j節點上面所有線的個數

long long mat[maxn][maxn];

long long n,m,k,ans;

void init()

}}void solve()

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

int inc=0;

//一輪i更新完了以後才能更新b[j]的所有值

for(int j=m;j>0;j--)

ans+=a[i];

}}int main()

}return 0;

}

POJ 3067 樹狀陣列

題意 給你兩行數字,n個m個,然後給你k條線直接把兩個數連起來,問有多少個交叉的 思路 假定上一行是起點,下一行是終點。 把路按照起點從大到...

POJ 3067 Japan 樹狀陣列

題意 左邊有n個城市,右邊有m個城市,現在修k條路,問會形成多少個交點 先按照x從小到大排,x相同的話,則按照y從小到大排,然後對於每一個y統計前面有多少個y比它大,它們就一定會相交 另外要用long long 1 include2 include3 include4 include 5 inclu...

樹狀陣列求逆序對 POJ 2299 3067

前幾天開始看樹狀陣列了,然後開始找題來刷。 首先是 poj 2299 ultra quicksort 這題是指給你一個無序序列,只能交換相鄰...