HDU 4866 多校1 主席樹 掃瞄線

2022-05-22 14:51:14 字數 1220 閱讀 5023

終於是解決了這個題目了

不過不知道下一次碰到主席樹到底做不做的出來,這個東西稍微難一點就不一定能做得出

離散化+掃瞄線式的建樹,所以對於某個座標二分找到對應的那顆主席樹,即搜尋出結果即可(因為是掃瞄線式的建樹,找到對應的樹之後,就知道該點上面的線段有多少條了)

其他就是普通主席樹的操作了

主席樹裡面維護兩個東西,乙個就是普通的那種在該區間的節點數目,另外就是權值

#include #include #include #include #define ll __int64

using namespace std;

const int n =200010;

const int maxn=n*100;

int n,m,x,p,tot;

int t[n],t[n];

int c1[maxn],lson[maxn],rson[maxn];

ll c2[maxn];

struct node2

}seg[n];

int build(int l,int r)

int inserts(int rt,int pos,int v1,ll v2)

else

c1[newrt]=c1[rt]+v1;

c2[newrt]=c2[rt]+v2;

}return tmp;

}ll query(int rt,int pos)

else

}return c2[rt]+ret;

}int main()

; seg[++cnt]=(node);

}sort(seg+1,seg+1+cnt);

sort(y+1,y+1+n);

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

t[0]=build(1,n);

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

ll pre=1;

while (m--)

int id;

int l=1,r=cnt+1;

while (l>1;

if (seg[mid].d=0))

else

}ll ans=query(t[id],k);

if (pre>p) ans*=2;

pre=ans;

printf("%i64d\n",ans);}}

return 0;

}

hdu4866(函式式線段樹)

題意 給n個目標線段,在 x,0 處開始沿y軸射擊目標,最多能擊中前k個,問k個目標距離和。前幾天學了下主席樹,然後又發現多校裡面正好有這類題,所以就來做一下。一開始自己的想法是這樣的 以線段的橫座標來建立函式式線段樹,但是各種tle,re,wa,最後實在傷不起了,這裡解釋下為什麼會tle和re,因...

HDU 4866 Shooting(主席樹)題解

題意 在乙個射擊遊戲裡面,遊戲者可以選擇地面上 1,x 的乙個點射擊,並且可以在這個點垂直向上射擊最近的k個目標,每個目標有乙個價值,價值等於它到地面的距離。遊戲中有n個目標,每個目標從l覆蓋到r,距離地面高度d。每次射擊乙個目標可以得到目標價值大小的分數,每次射擊以後目標不會消失。如果在該點上方的...

多校 HDU6601(主席樹 線段樹 RMQ)

q 給n 1 n 1e5 個任意長度的三角形,長度為a1,a2,an 1 ai 1e9 q 1 q 1e5 組詢問,每組詢問給出l和r,在第l個到第r個的長度中選三個組成三角形使其周長最大,不存在輸出 1 a 首先這三個長度按大小排序時的標號顯然必定是連續的 比方說設三個長度a b c,如果a是這個...