終於是解決了這個題目了
不過不知道下一次碰到主席樹到底做不做的出來,這個東西稍微難一點就不一定能做得出
離散化+掃瞄線式的建樹,所以對於某個座標二分找到對應的那顆主席樹,即搜尋出結果即可(因為是掃瞄線式的建樹,找到對應的樹之後,就知道該點上面的線段有多少條了)
其他就是普通主席樹的操作了
主席樹裡面維護兩個東西,乙個就是普通的那種在該區間的節點數目,另外就是權值
#include #include #include #include #define ll __int64using 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是這個...