貪心,每人每次分給的一定是所需代價最小的v[i
]−1v[i]-1
v[i]−1
個,且分給他的只需要比上乙個人多乙個。
#include #include #include #include #define ll long long
using namespace std;
const ll inf=1000000000019260817ll;
ll add(ll a,ll b)
const int q=2000005;
ll sm[q],v[q],cmp[q],lazy=0;
int tot=0;
int fa[q],si[q],ls[q],rs[q],ct[q];
int rt=0;
void upd(int x)
void ***(int x)
void splay(int x)
rt=x;
}void ins(ll val,int sz)
int p=rt;
while(1)
if(val57||o<48)o=gc;
while(o>=48&&o<=57)
return t;
}int main()
if(x>si[rt])
int p=rt,now=x;
while(1)
splay(p);
ll mus=add(cmp[p]*((ll)x-si[ls[p]]),sm[ls[p]]);
mus=add(mus,(ll)x*lazy);
if(mus>k)
printf("%lld\n",k-mus);
int ned=i-1-x-si[rs[p]],wil=i-1-x;
rs[p]=0;
if(ned==ct[p])
}else ct[p]-=ned,v[p]-=cmp[p]*ned,upd(p);
if(wil)ins(-lazy,wil);
ins(k-mus-lazy,1);
} return 0;
}
2017 山東二輪集訓 Day7 國王
給定一棵樹,每個點有黑白兩種顏色,定義一條簡單路徑合法當且僅當路徑上所有點黑色與白色數量相等,求有多少非空區間 l,r 使得所有編號 in l,r 的點形成的本質不同的合法簡單路徑數多於所有編號 notin l,r 的點形成的本質不同的合法路徑樹。考慮所有以 x 為乙個端點的合法簡單路徑數量為 f ...
2017 山東一輪集訓 Day4 基因
設定 sqrt 個關鍵點,維護出關鍵點到每個右端點之間的答案以及pam的左指標,每次暴力向左插入元素即可,為了去重,還需要記錄一下pam上每個節點在每個關鍵點為左端點插入到時候到最左邊出現位置,總複雜度 o n sqrt program by mangoyang pragma gcc optimiz...
2017 山東一輪集訓 Day7 逆序對
題解 滿滿的套路題。首先顯然從大到小列舉 然後每次生成的逆序對是1 i 1 的 這樣做dp是nk的 複雜度太高了 那我們轉化一下問題 變成sigma ai ai 據說是個經典問題。感覺非常奇妙 先容斥一下,也就是說 總的 至少1個條件不滿足 至少2個條件不滿足 那考慮一下如何算有x個條件不滿足 不滿...