JZOJ6086 動態半平面交

2021-09-14 02:32:41 字數 2599 閱讀 2270

假設到u

uu不超過d

dd的點的權值分解質因數的質數集合為p

pp,答案就是要求∑i=

1∣p∣

piki

\sum\limits_^ p_i^

i=1∑∣p

∣​pi

ki​​

。這個很不好處理,考慮把乙個p

kp^k

pk拆成p ,p

2,p3

,⋯,p

kp,p^2,p^3,\cdots,p^k

p,p2,p

3,⋯,

pk中顏色,每種顏色的貢獻都為p

pp,那麼題目轉化成為到u

uu不超過d

dd的點中顏色至少出現一次的貢獻積。那麼就是經典問題了,可以對每種顏色維護dfs

dfsdf

s ep

u+

ddep_u+d

depu​+

d的線段樹上查詢uuu

#include

#include

#include

#include

#include

#include

#define fo(i,j,k) for(int i=j;i<=k;++i)

#define fd(i,j,k) for(int i=j;i>=k;--i)

#define rep(i,x) for(int i=ls[x];i;i=nx[i])

using

namespace std;

typedef

long

long ll;

const

int n=

1e5+

10,m=

2e5+

10,s=

1e7+

10,mo=

998244353

;typedef multiset<

int>

:: iterator it;

int to[m]

,nx[m]

,ls[n]

,num=0;

void

link

(int u,

int v)

int bg[s]

,tt=

0,tot=0;

multiset<

int> cl[n*24]

;int l[n]

,r[n]

,f[n][17

],dep[n]

,z[n]

,n;vector<

int> dz[n]

;int a[n]

;int

qpow

(int x,

int y)

void

pre(

int x,

int fr)

intlca

(int u,

int v)

int pr[s/15]

,sm[s]

;int mx=0;

void

pre0()

}}int d[50]

;void

find

(int x)

int rt[n]

;void

mul(

int&x,

int y)

struct nodetr[n*

110]

;int be[n*

110]

;int now;

void

ins(

int x,

int t,

int&v,

int l=1,

int r=n)

mul(tr[v]

.s,t);if

(l==r)

return

;int mid=

(l+r)

>>1;

x<=mid?

ins(x,t,tr[v]

.l,l,mid)

:ins

(x,t,tr[v]

.r,mid+

1,r);}

intprod

(int x,

int y,

int v,

int l=1,

int r=n)

intget

(int x)

return bg[x];}

void

modify

(int t,

int cc,

int x)

void

add(

int x)

}int

main()

pre0()

,pre(1

,0),tot=0;

fo(i,

1,n) dz[dep[i]].

push_back

(i);

fo(i,

1,n)

int q,ans=0;

scanf

("%d"

,&q)

;for

(;q--;)

}

半平面交模板

妹的,一直沒有想清楚無解的情況到底是如何判斷的。偷來乙個模板。半平面交的結果 1.凸多邊形 後面會講解到 2.無界,因為有可能若干半平面沒有形成封閉3.直線,線段,點,空 屬於特殊情況吧 演算法 1 根據上圖可以知道,運用給出的多邊形每相鄰兩點形成一條直線來切割原有多邊形,如果多邊形上的點i在有向直...

模板 半平面交

考慮用射線 乙個點和乙個向量 表示它左側的半平面 那麼我們可以先按與x軸正半軸夾角 可用atan2 y,x 實現 排序,然後再用雙端佇列維護當前在交中的射線即可 之所以要用雙端佇列,是因為新插入乙個半平面時隊首和隊尾都有可能被彈出,而且要注意的是,要先彈隊尾再彈隊首 在最後,還要再用隊首的彈一些隊尾...

半平面交 板子

poj 2451 敲了個板子,比帶花樹稍微好一些,但是還是很麻煩.寫了點注釋 include include include define point vector const int n 2e4 10 struct vector vector double x,double y double an...