學長講完線段樹,樹狀陣列後讓我們做的題,但是看完題目,感覺用線段樹沒什麼想法,然後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 這題是指給你一個無序序列,只能交換相鄰...