題目鏈結
兩個操作:
1.在序列s中加入乙個向量;
2.求某個向量和s的區間[l,
r]
[l,r]
[l,r
]中向量的點積最大值。
n ,m
≤105
n,m\le 10^5
n,m≤10
5考慮兩個向量(a1
,b1)
,(a2
,b2)
(a_1,b_1),(a_2,b_2)
(a1,b
1),
(a2
,b2
),詢問向量為(x,
y)
(x,y)
(x,y
)。不妨令a1≤
a2
a_1\le a_2
a1≤a2
,如果1比2優,則有(a1
−a2)
x≥(b
2−b1
)y
(a_1-a_2)x\ge (b_2-b_1)y
(a1−a
2)x
≥(b2
−b1
)y。若y
>
0y>0
y>
0,則−x/
y≥(b
1−b2
)/(a
1−a2
)-x/y\ge (b_1-b_2)/(a_1-a_2)
−x/y≥(
b1−
b2)
/(a1
−a2
)。因此我們應該維護乙個斜率遞減的凸包(即上凸包)。
同理對於y
<
0y<0
y<
0的情況我們需要維護乙個下凸包,這個可以把所有座標取相反數維護乙個上凸包。
於是在往後加入點的過程中,如果線段樹某個節點滿了,就重建凸包,座標排序那部分可以直接歸併排序解決,複雜度就是o(n
logn
)o(nlogn)
o(nlog
n)的了。對於詢問,我們需要在每個節點上的凸包中二分斜率,因此這部分的複雜度為o(n
log2
n)
o(nlog^2n)
o(nlog
2n)。
#include
using
namespace std;
const
int maxr =
10000000
;char _read_[maxr]
, _print_[maxr]
;int _read_pos_, _print_pos_, _read_len_;
inline
char
readc()
template
<
typename t>
inline
void
read
(t &x)
template
<
typename t1,
typename..
.t2>
inline
void
read
(t1 &a, t2&..
. x)
inline
intreads
(char
*s)inline
void
ioflush()
inline
void
printc
(char c)
inline
void
prints
(char
*s)template
<
typename t>
inline
void
print
(t x,
char c =
'\n'
)else
printc
('0');
printc
(c);
}template
<
typename t1,
typename..
.t2>
inline
void
print
(t1 x, t2.
.. y)
typedef
long
long ll;
const
int maxt =
1<<20|
5, maxn =
400005
;struct vec ;}
inline vec operator-(
)const;}
inline ll det
(const vec &v)
const
inline ll dot
(const vec &v)
const
inline
bool
operator
<
(const vec &v)
const
} temp[maxn]
;struct hull
inline
const vec&
operator
(int x)
const
void
merge
(const hull &a,
const hull &b)
po =
new vec[n]
;for
(int i =
0; i < n; i++
) po[i]
= temp[i];}
ll query
(const vec &v)
return po[r]
.dot
(v);
}} tr[maxt][2
];int tot, n, tn;
void
push
(const vec &v)
; tr[k][1
].po =
new vec[1]
; tr[k][0
].n = tr[k][1
].n =1;
while
((k &1)
&& k >0)
}ll query
(int a,
int b,
const vec &v,
int l =1,
int r = tn,
int k =1)
char opt[5]
, tp[5]
;int
main()
));}
else);
}}ioflush()
;return0;
}
SDOI2014 數表 解題報告
這題並沒有做出來。設f i d i d 考慮按f i 排序,則對於詢問 n m n m f i 會貢獻 nd d 1 d n id mid 這樣我們按照id考慮即可。但是我做的時候錯誤地把它化成了這樣 nd d 1 d ni d m i d 這樣就很難考慮出來該怎麼做了。include includ...
SDOI 2014 重建 題解
題目傳送門 題目大意 給出一張圖,過後每條邊有乙個存在的概率,問 後圖變樹的概率。又長見識了 還有個變元矩陣樹定理。對於圖的一棵生成樹,它的出現概率為 存在的邊的 p i p i p i 之積乘不存在的邊的 1 p i 1 p i 1 p i 之積。設圖為 g gg,生成樹為 t tt,那麼用柿子表...
Sdoi2014 數數 數字dp AC自動機
time limit 10 sec memory limit 512 mb submit 834 solved 434 submit status discuss 我們稱乙個正整數n是幸運數,當且僅當它的十進位制表示中不包含數字串集合s中任意乙個元素作為其子串。例如當s 22,333,0233 時,...