思路請參考:
下面是我的**:
#include#include#include#include#include#include#include#include#include#include#include#define ll __int64
#define n 20005
#define inf 0x7ffffff
#define eps 1e-9
#define pi acos(-1.0)
using namespace std;
struct node
s[n];
int c[n],countt[n];//c是樹狀陣列,countt[i]記錄比音量比i小下標比牛i小的牛的個數
int total[n];//total[i]表示音量比牛i小的牛且下標比牛i小的牛的下標和
int alltotal[n];//alltotal[i]表示音量比牛i小的牛的下標和
bool cmp(node a,node b)
int lowbit(int x)
void update(int x, int v)
int sum(int x)
int main()
memset(c,0,sizeof(c));
memset(total,0,sizeof(total));
for(i = 0; i < n; i++)
ll ans = 0;
memset(alltotal,0,sizeof(alltotal));
for(i = 1; i < n; i++)
alltotal[i] = alltotal[i-1] + s[i-1].x;
for(i = 1; i < n; i++)
{//cout<
poj 1990 樹狀陣列
開始對距離排序 然後果斷的tle了 然後發現應該對power排序,然後我們記錄和更新的是 比x小的個數與距離和,然後每次算的時候,因為按power排序了,當前的pi一定是最大的,所以就能在logdistance的時間內算出來 ac 如下 include include include include...
POJ 1990(樹狀陣列)
題目 一開始咋都想著得n n,畢竟pair在那擱著來,看了題解才知道原來可以用樹狀陣列 對於每個cow i 來說,由它的v i 決定的有兩部分,左邊部分和右邊部分,如果把cow關於v公升序排列,逐個求得由每個cow i 決定的volume,就可以復用前面的計數了 include include in...
POJ1990 樹狀陣列)
對於樹狀陣列的理解不透 不會轉化 題解 顯然是要按照v排序的,那麼首先在on情況下是可以完成max vi,vj 的操作,對於某個牛i,我們只需考慮i之前的,那麼i之前的牛我們需要知道每只牛j abs dis i dis j 去掉絕對值後,我們只需要知道所有dis j dis i 的牛的x的和 sum...