折半搜尋裸題
(注意陣列大小要大於1048576,作者第一次提交就只開了1000000,鍋了)
用乙個陣列c儲存並排序。
在列舉後一半的方案,設其費用為w,
按w從大到小排序,
用乙個單調指標維護c陣列中小於等於m-w的方案個數,
ans累加方案個數。
(w從大到小,m-w從小到大,指標單調右移)
當然你也可以離散化後用字首和(太麻煩了,不寫),
或者排序後用upper_bound(多此一舉)
**:
#include#define ll long long
using namespace std;
const int n=2e6+6;
int l=1,n1,n2,n,num1=0,num2=0;
ll t,m,ans=0,a[n],b[n],c[n],d[n];
inline ll read()
while(ch>='0'&&ch<='9') t=(t<<3)+(t<<1)+(ch-48),ch=getchar();
return f*t;
}void dfs(int x,ll y,int z,ll p,ll q,int &num)
dfs(x+1,y,z,p,q,num),dfs(x+1,y+q[x],z,p,q,num);
}int main()
printf("%lld\n",ans);
return 0;
}
世界冰球錦標賽 折半搜尋
梁神園神 譯自 ceoi2015 day2 t1 ice hockey world championship 今年的世界冰球錦標賽在捷克舉行。bobek 已經抵達布拉格,他不是任何團隊的粉絲,也沒有時間觀念。他只是單純的想去看幾場比賽。如果他有足夠的錢,他會去看所有的比賽。不幸的是,他的財產十分有限...
CEOI2015 Day2 世界冰球錦標賽
題目描述 譯自 ceoi2015 day2 t1 ice hockey world championship 今年的世界冰球錦標賽在捷克舉行。bobek 已經抵達布拉格,他不是任何團隊的粉絲,也沒有時間觀念。他只是單純的想去看幾場比賽。如果他有足夠的錢,他會去看所有的比賽。不幸的是,他的財產十分有限...
洛谷P4799 世界冰球錦標賽 折半搜尋
給出n 40 n leq40 n 40 個比賽,給出每個比賽的票價以及m 1 e18 m leq1e18 m 1e18 表示你的積蓄。然後求問能看的比賽的方案數是多少。n nn如果能夠再小一些就可以直接暴搜了,但是搜不得。但是拆成兩半然後把兩邊所有的可行方案的總和全部儲存下來,對左邊的某個方案x x...