這題看起來很難。。。但是實際上並沒有想象中的那麼難
第一眼看上去不會求導公式怎麼辦?不要緊,題目背景非常良心的給出了題目中的導數計算公式
求完導合併同類項很噁心怎麼辦?不要緊,樣例解釋說明了不需要合併同類項(然後有許多人因為這個爆〇了)
一看這種題目形式明顯就是大資料結構,外面的序列明顯線段樹維護,次數也可以用線段樹,但是線段樹套線段樹容易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 首先...