NZAU 1203: One Stroke 树上二分前缀和
来源:互联网 发布:xapmm 设置域名重定向 编辑:程序博客网 时间:2024/06/16 08:41
因为这是颗完全二叉树,节点都是按次序编号的,所以递归顺序很明确,判断终止条件也很明确,枚举每个点,并更新以深度为下标的前缀和,二分找到离当前节点最远且到当前节点的权值小于等于k的点。
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <vector>#include <map>#include <cmath>#include <set>#include <queue>using namespace std;const int INF=1e9+10;typedef long long ll;int T,n,k;int a[1000006];int sum[100];int ans1;void dfs(int u,int dep){if(u>n) return;sum[dep]=sum[dep-1]+a[u];int l=0,r=dep,ans;while(l<=r){int mid=(l+r)/2;if(sum[dep]-sum[mid]<=k){r=mid-1;ans=mid;}else l=mid+1;}ans1=max(ans1,dep-ans);dfs(u*2,dep+1);dfs(u*2+1,dep+1);}int main(){scanf("%d",&T);while(T--){ans1=0;scanf("%d %d",&n,&k);for(int i=1;i<=n;i++) scanf("%d",&a[i]);dfs(1,1);if(ans1==0) printf("-1\n");else printf("%d\n",ans1 );}return 0;}
阅读全文
0 0
- NZAU 1203: One Stroke 树上二分前缀和
- HZAU 1203 One Stroke(dfs+二分 Or 双指针)
- luogu2680【2015提高】运输计划(二分答案+lca+树上差分前缀和)
- HDU6103Kirinriki(前缀和+二分)
- nyoj+二分前缀和
- 【uoj#150】【NOIP2015】运输计划 树上前缀和+lca+二分+拓扑排序+特别的卡常数技巧
- UVA--1211(二分+前缀和)
- POJ3484_Showstopper_前缀和思想&&二分
- Problem E: One Stroke----暴力
- [NOIP 2012]借教室 二分+前缀和
- poj3061(二分前缀和或者尺取法)
- Poj 3061 Subsequence(二分+前缀和)
- POJ - 3484 Showstopper(二分 + 前缀和)
- la2678(前缀和,二分/尺取法)
- Codeforces 460C Present 二分+前缀和
- [NOIP2011] 聪明的质监员 二分+前缀和
- 【NOIP】借教室(二分+前缀和)
- stroke和closePath
- Matlab遗传算法学习-recint.m
- 广电电视信号如何生成RTMP流进入流媒体系统网络分发实现手机APP播放
- 微信支付开发相关及测试[未完]
- 从程序员到项目经理
- Matlab遗传算法学习-reclin
- NZAU 1203: One Stroke 树上二分前缀和
- C++ 虚函数表解析
- SIP 中的Dialog,call,session 和 transaction
- 移动端adaptive设置
- javac: file not found
- 排序算法实践编程之——快排法
- elasticSearch深度剖析之集群升级规范操作步骤
- SPOJ 8073 CIRU
- LINUX MAN 常用命令/ubuntu man手册完善