题意: 问 gcd(i,j) = i ^ j 的对数(j
思路:容易想到 形如 (2,3) (4,5).....这种互质相邻且二进制位数相同的数一定满足要求。
那么对于gcd为2情况进行分析:
从gcd(a,b) = 2得到a/2,b/2互质,可以想到a/2与b/2相差只能是1,因为要使a^b = 2 a,b只有在第1位有差别,即差别为2,如果a/2与b/2相差超过1,那么a,b就不...
分类:
其他好文 时间:
2014-10-15 16:16:11
阅读次数:
151
题目大意:可修改的区间第k小
这个主席树卡了我两天。。。切掉Count On A Tree 之后我就一直认为带修改的主席树是树状数组套可持久化线段树。。。其实我被误导了。。。
尼玛带修改的主席树和可持久化线段树毛关系都木有啊!!!
那就是动态的权值线段树啊啊啊啊啊啊啊!!!
好吧这里给不明白主席树的孩纸一些简介:
1.外层树状数组
2.里层线段树
3.线段树动态开节点。仅此而...
分类:
其他好文 时间:
2014-10-15 14:06:00
阅读次数:
284
题目大意:一个序列,有两种操作,1.将一段数中的每一个数开根号。2.查询一段数的和。
思路:和3211是一个题,有兴趣的可以看看我的那篇博客。
CODE:
#include
#include
#include
#include
#include
#define MAX 100010
using namespace std;
int cnt,asks;
long...
分类:
编程语言 时间:
2014-10-15 12:16:20
阅读次数:
189
题目大意:花神对每一个国家有一个喜爱程度,有的时候他会对连续的一段国家进行访问,求他的喜爱程度的和;有的时候他会对连续的一段国家产生厌恶,喜爱程度变成sqrt(x)下取整。
思路:乍一看好像是RMQ问题,用线段树就可以水过,但是开根号的标记怎么下传?这是一个严重的问题,所以我们要换一个思路。
注意到开根号有一个有趣的性质:sqrt(1) = 1,sqrt(0) = 0,而且所有的数字经过有...
分类:
编程语言 时间:
2014-10-15 11:44:08
阅读次数:
216
题目大意:给定一棵有根树,每个节点有权值,求有多少链上的权值和为S,要求链上节点的深度必须单调(即这条链由某个节点出发指向根)
DFS一遍,当深搜到一个点时将这个点加入队列,同时队头向后调整,使队列中元素之和
当一个点出栈时将队尾删除,同时队头向前调整,使队列中元素之和刚好
这题1s略卡时间。。。不过我旁边的哥们用nlogn的算法超时700ms过去的0.0 这怎么过去的0.0 误差也太大了吧...
分类:
其他好文 时间:
2014-10-15 11:12:30
阅读次数:
211
题目大意:给出一棵树和一个整数s,问在树上有几条这样路径,保证路径上的点权和==s,点的深度递增。输出这个数量。
思路:利用倍增的思想,我们能在O(logn)的时间内求出一个点到他的第n个爸爸之间所有点的点权之和。由于点权只能是正的,满足二分性质。然后对于每一个点二分,看看有没有路径的权值和是S,统计答案,输出。
CODE:
#include
#include
#in...
分类:
其他好文 时间:
2014-10-15 10:52:10
阅读次数:
170
题目大意:查询树上两点之间的第k大的点权。
思路:树套树,其实是正常的树套一个可持久化线段树。因为利用权值线段树可以求区间第k大,然后再应用可持久化线段树的思想,可以做到区间减法。详见代码。
CODE:
#include
#include
#include
#include
#define MAX 100010
#define NIL (tree[0])
usin...
分类:
其他好文 时间:
2014-10-14 19:41:19
阅读次数:
153
BZOJ水一道~
枚举前两个位置是否放雷,模拟向下推,可以则ans++
#include "stdio.h"
#include "string.h"
int a[10010],b[10010],n;
int judge()
{
int i;
for (i=3;i<=n;i++)
{
b[i]=a[i-1]-b[i-1]-b[i-2];
...
分类:
其他好文 时间:
2014-10-14 19:01:09
阅读次数:
140
题目大意:给定k位二进制下的n个数,求[l,r]区间内有多少个数能通过这几个数与非得到
首先观察真值表 我们有A nand A = not A
然后就有not ( A nand B ) = A and B
与和非都弄到了,我们就可以做出一切逻辑运算了,比如说或和异或
A or B = not ( ( not A ) and ( not B ) )
A xor B = ( A or B )...
分类:
其他好文 时间:
2014-10-14 17:55:39
阅读次数:
185
题解:筛出约数,然后计算即可。#include #include typedef long long LL; LL a1[1000005],a2[1000005],x,y,k,g;int cnt1,cnt2,T;LL gcd(LL a,LL b){if(b==0)return a;else retu...
分类:
其他好文 时间:
2014-10-14 17:00:09
阅读次数:
169