POJ 1990 MooFest 樹狀陣列

2021-08-11 09:42:33 字數 1178 閱讀 3612

題意:

又是農夫約翰和他的牛,

給定n個牛,每個牛有個聽力下限,和位置,他們之間互相說話會有乙個 值 = max(聽力下限)*  距離

思路:用兩個樹狀陣列,分別維護 (前面比他位置小的數和比他大的數的 個數) 和 (所有位置的和)

詳見題解

#include#include#include#include#include#include#include#include#include#include#include#define pi acos(-1.0)

#define in freopen("in.txt", "r", stdin)

#define out freopen("out.txt", "w", stdout)

#define kuaidian ios::sync_with_stdio(0);

using namespace std;

typedef long long ll;

typedef unsigned long long ull;

const int maxn = 2e4 + 7, maxd = 670000 + 7;

const ll mod = 1e9 + 7;

const int inf = 0x7f7f7f7f;

int n, cnt = 0;

int id[maxn+1];

ll bit[maxn+1] = ;

int bitt[maxn+1] = ;

struct node a[maxn];

bool cmp(node a, node b)

ll sum1(int i)

return s;

}void add1(int i, int x)

}int sum2(int i)

return s;

}void add2(int i, int x)

}int main()

sort(a, a+n, cmp);

add1(a[0].id, a[0].id);

add2(a[0].id, 1);

ll ans = 0;

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

cout << ans << endl;

return 0;

}

POJ 1990 MooFest 樹狀陣列

思路 定義兩棵樹狀陣列,第乙個記錄座標個數和,第二個記錄橫座標和。對volumn從小到大排序,保證遍歷更新的時候當前的volumn取最大。lescnt表示前i 1個比第i個橫座標小的cow的總數。lessum表示前i 1個橫座標比當前小的橫座標之和 bigcnt表示前i 1個比當前橫座標大的cow的...

poj 1990 MooFest 樹狀陣列

題意就是有n頭牛,每頭牛都有乙個座標和聲調值 x,v 兩頭牛之間通訊要花費的能量是他們的距離乘以最大的乙個音調值,現在要任意兩頭牛之間都相互通訊一次,求總共需要花費多少能量?顯然總共有n n 1 2條,我們可以用樹狀陣列儲存,樹狀陣列很適合求區間的和,我們只需要求出某頭牛左右兩邊分別有多少頭牛比它的...

POJ 1990 MooFest 樹狀陣列

題意 就算每兩頭牛之間聲音值 2頭牛v的最大值 2頭牛之間的距離 思路 按照v從小到大插入樹狀陣列 因為從小到大排序 每插入一頭牛i 當前v最大值就是牛i的v 統計x比他小的個數s1 x比他大的個數s2 s2 就是當前樹狀陣列牛的數量減去s1在減一 統計x比他小的距離l1 和 x比他大的距離l2 l...