Cs Round#56 D Find Path Union
题意:有一棵如下的完全二叉树,求所有给定结点到根节点的路径的并有多少条边。
一开始联想到线段树,发现结点的排布很像线段树的标号。于是模仿线段树敲了一下,交上去发现3个点MLE了。。。
无心优化,跑去看题解。题解的思路是自底向上,先将询问的结点排序,最后从最深的节点开始往上递推,记录每层开始分叉的结点,统计答案即可
正解:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
vector<LL>a;
queue<LL>q;
int n,ans=;
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
LL x;
scanf("%lld",&x);
a.push_back(x);
}
sort(a.begin(),a.end());
while(a.size()||!q.empty()){
LL maxn;
if(!a.size())maxn=q.front();
else if(q.empty())maxn=a.back();
else maxn=max(q.front(),a.back());
ans++;
if(maxn>>)q.push(maxn>>);
while(!q.empty()&&maxn==q.front())q.pop();
while(a.size()&&maxn==a.back())a.pop_back();
}
printf("%d\n",ans-);
return ;
}
76.92 points:
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long uLL;
map<uLL,bool>vis;
unsigned int n,ans=;
uLL pw[];
void form(){
pw[]=;
for(int i=;i<=;i++)pw[i]=1ll*pw[i-]*;
for(int i=;i<=;i++)pw[i]--;
}
void query(uLL k,uLL l,uLL r,uLL x){
//printf("%d\n",k);
if(!vis[k]){
ans++;
vis[k]=;
}
if(l==r)return;
int mid=(l+r)>>;
if(x<=mid)query(k<<,l,mid,x);
else query(k<<|,mid+,r,x);
}
int main(){
form();
scanf("%d",&n);
for(int i=;i<=n;i++){
uLL x;
int t;
scanf("%llu",&x);
t=lower_bound(pw+,pw+,x)-pw;
//printf("%d\n",t);
query(,,<<(t-),x-pw[t-]);
}
printf("%d\n",ans-);
return ;
}
Cs Round#56 D Find Path Union的更多相关文章
- CS Round#53 C Histogram Partition
题意:给定一个数组A,以及一个初始值全为0的空数组B,每次可以对数组B的任意一个区间内的所有数+x,问至少几次操作能把B数组变成A数组 NOIP原题(积木大赛)升级版,话说CS怎么那么多跟NOIP原题 ...
- Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2) D. Minimum path
http://codeforces.com/contest/1072/problem/D bfs 走1步的最佳状态 -> 走2步的最佳状态 -> …… #include <bits/ ...
- Codeforces Beta Round #3 A. Shortest path of the king 水题
A. Shortest path of the king 题目连接: http://www.codeforces.com/contest/3/problem/A Description The kin ...
- BestCoder Round #56 1002 Clarke and problem 1003 Clarke and puzzle (dp,二维bit或线段树)
今天第二次做BC,不习惯hdu的oj,CE过2次... 1002 Clarke and problem 和Codeforces Round #319 (Div. 2) B Modulo Sum思路差不 ...
- Codefroces Educational Round 27 845G Shortest Path Problem?
Shortest Path Problem? You are given an undirected graph with weighted edges. The length of some pat ...
- CH Round #56 - 国庆节欢乐赛解题报告
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
- Codeforces Beta Round #3 A. Shortest path of the king
标题效果: 鉴于国际棋盘两点,寻求同意的操作,是什么操作的最小数量,在操作过程中输出. 解题思路: 水题一个,见代码. 以下是代码: #include <set> #include < ...
- Cs Round#54 E Late Edges
题意:给定一个无向图,你从结点1开始走,每经过一条边需要1的时间,每条边都有一个开放时间,只有当目前所用的时间大于等于开放时间时,这条边才可以被经过.每一单位时间你都必须经过一条边,问最快什么时候可以 ...
- Cs Round#54 D Spanning Trees
题意:构造一张N个结点无重边.无自环的无向图.使得其最小生成树和最大生成树共享K条边. 样例一很具有启发性: 当K!=0时,我们可以先构造出一条链,链的长度为n-k的链,作为最小生成树的一部分,之后由 ...
随机推荐
- linux下使用crontab实现定时PHP计划任务失败的原因分析
这篇文章主要介绍了linux下使用crontab实现定时PHP计划任务失败的原因分析,需要的朋友可以参考下 很多人在linux下使用crontab实现PHP执行定时任务却未能成功,不能生成缓存.本 ...
- 2017 多校训练 1002 Balala Power!
Balala Power! Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- 编译安装PHP 时遇到问题解决方法.
编译安装PHP时出现下面的错误代码: error 2 checking for pkg-config... /usr/bin/pkg-config configure: error: Cannot f ...
- Problem B: 农夫果园 简单点,出题的方式简单点
我走过最长的路,就是教主的套路#include <iostream> #include <string> using namespace std; class Fruit { ...
- 原生js实现简单移动端轮播图
最近项目不是很忙,自己就用原生js写了一个简单的移动端轮播图的小demo,可实现自动轮播和手势滑动轮播,然后就把它记录到个人博客里.还有很多不足的地方,希望多多指出,以便改进. 1.代码部分 分为四个 ...
- git(2)----Git的常用撤销技巧与解决冲突方法
git checkout . #本地所有修改的.没有的提交的,都返回到原来的状态 git stash #把所有没有提交的修改暂存到stash里面.可用git stash pop回复. git rese ...
- 在C#程序中模拟发送键盘按键消息
using System.Runtime.InteropServices; 引入键盘事件函数 [DllImport("user32.dll")]public static exte ...
- iOS swift的xcworkspace多项目管理(架构思想)
iOS swift的xcworkspace多项目管理(架构思想) 技术说明: 今天在这里分享 swift下的 xcworkspace多项目管理(架构思想),能为我们在开发中带来哪些便捷?能为我们对整 ...
- 基于HTML5 Canvas 点击添加 2D 3D 机柜模型
今天又返回好好地消化了一下我们的数据容器 DataModel,这里给新手做一个典型的数据模型事件处理的例子作为参考.这个例子看起来很简单,实际上结合了数据模型中非常重要的三个事件处理的部分:属性变化事 ...
- 用Python写一款属于自己的 简易zip压缩软件 附完成图(适合初学者)
一.软件描述 用Python tkinter模块写一款属于自己的压缩软件.zip文件格式是通用的文档压缩标准,在ziplib模块中,使用ZipFile来操作zip文件,具有功能:zip压缩功能,zip ...