(2016北京集訓十二) xsy1542 瘋狂求導

2022-05-03 16:27:11 字數 1805 閱讀 8961

這題看起來很難。。。但是實際上並沒有想象中的那麼難

第一眼看上去不會求導公式怎麼辦?不要緊,題目背景非常良心的給出了題目中的導數計算公式

求完導合併同類項很噁心怎麼辦?不要緊,樣例解釋說明了不需要合併同類項(然後有許多人因為這個爆〇了)

一看這種題目形式明顯就是大資料結構,外面的序列明顯線段樹維護,次數也可以用線段樹,但是線段樹套線段樹容易mle;

所以用樹狀陣列套線段樹實現

具體就是以1~n為下標建線段樹,外面用樹狀陣列維護次數,每次在樹狀陣列上查詢即可

寫完過樣例直接1a就是爽

1 #include2 #include3 #include4 #include5 #include6 #include7

#define inf 2147483647

8#define eps 1e-9

9#define lb(x) (x&-x)

10using

namespace

std;

11 typedef long

long

ll;12

const

int n=1000000,bit=524288;13

struct

nodet[10000001

];17

int n,m,ans=0,op,l,r,tot=0,rts[1000001

];18

intthesenumbersdonotmakeanysense;

19ll s;

20void newn(int &u)

23void pd(int u,int l,int

r)34}35

void updata(int l,int r,int &u,int l,int r,int

v)42

int mid=(l+r)/2;43

pd(u,l,r);

44if(l<=mid)updata(l,mid,t[u].ls,l,r,v);

45if(mid1

,r,t[u].rs,l,r,v);

46 t[u].v=t[t[u].ls].v+t[t[u].rs].v;47}

48int query(int l,int r,int u,int l,int

r)53

int mid=(l+r)/2,ret=0;54

pd(u,l,r);

55if(l<=mid)ret=query(l,mid,t[u].ls,l,r);

56if(mid1

,r,t[u].rs,l,r);

57return

ret;58}

59void ins(int l,int r,int

s)63

}64 ll ask(int l,int r,int

s)69

return

ret;70}

71void work(int l,int

r,ll s)

78 s=ret-s;

79for(int bt=bit;bt;bt/=2)85

}86 ll rt=ask(l,r,tmp+1

);87 rt=ret-rt;

88 printf("

%lld %lld\n

",tmp+2

,rt);

89 ans=tmp+2;90

}91intmain()

96for(int i=1;i<=m;i++)else

104}

105return0;

106 }

(2016北京集訓十四) xsy1557 task

限制可以看成圖狀結構,每個任務的對物品數量的影響可以看成權值,只不過這個權值用乙個五元組來表示。那麼題意要求的就是最大權閉合子圖,網路流經典應用。1 include2 include3 include4 include5 include6 include7 define inf 1000000000...

xsy1531 北京集訓2016 魔法遊戲

orz sjk 有一棵樹,兩個人每個節點上有乙個權值,兩個人輪流選擇乙個根節點將其權值 k 除以 2,k 1 若除到 0 就刪去此根節點,它的兒子變成新根節點,刪掉最後乙個點贏。求先手還是後手必勝。首先考慮一些只有乙個根節點的樹,如果以二進位制角度看,每次除以 2,k 1 的數相當於拿掉一些二進位制...

2016北京集訓 陣列

portal broken qwq 給你乙個陣列,每個元素有乙個顏色,要求支援兩種操作 1 修改某個元素的顏色 2 詢問這個陣列有多少個自取件內沒有重複的顏色 資料範圍 n 10 5,m 2n 顏色大小在 1 sim n 之間 這題。本來應該是乙個樹套樹題 但是為什麼一定要用樹套樹呢對吧qwq 首先...