自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

帷幕后的文和

acm-icpc斗士

  • 博客(18)
  • 收藏
  • 关注

原创 线段树进阶学习(例题)--树状数组学习+离散化+成端更新+区间合并+扫描线

树状数组一、树状数组简介 树状数组(Binary Indexed Trees,简称BIT)是一种特殊的数据结构,这种数据结构的时空复杂度和线段树相似,但是它的系数要小得多。它可以方便地查询出一段区间中的数字之和。其查询和修改的时间复杂度均为O(lbN),并且是一个在线的数据结构,可以随时修改并查询。我接下来用一道题目来介绍树状数组的几个基本操作。 【引例】 假设有一列数{Ai}(1<=i<

2016-07-26 17:39:41 2211

原创 LCA三种算法学习(离线算法tarjan+在线算法转rmq+在线倍增)例题poj1330、1470;hdu4547、2874

LCA 问题,即Least Common Ancestors(最近公共祖先)的意思是:给定一有根树,求其两个节点最近的公共祖先;节点的祖先即从节点至根的路径上的节点的集合。lca离线算法离线算法,就是要将所有询问先存起来,一起处理,然后再一起输出,与之相对应的是在线算法。在线算法,每给一个询问便可以立即求出答案。Tarjan算法利用并查集优越的时空复杂度,我们可以实现LCA问题的O(n+Q)算法,这

2016-07-24 17:14:36 1760

原创 Codefores 689D. Friends and Subsequences(二分+st)

题意:求max(l,r)与min(l,r)相等的对数。 用st表保存max和min的信息。 但是这样子如果枚举左端点再枚举右端点,n2绝对t了。 我刚开始写的是二分区间(递归写的),wa了,找不出哪里错了,不过比起下面这种又不好写又不好查代码。所以要利用区间性质进行二分, 利用序列a的最大值单调非递减,序列b的最小值单调非递增,二分两次。 第一次求出最大值与最小值相等时j的最小值p,第二次

2016-07-23 16:43:02 316

原创 poj1182(食物链)----带权并查集

这道题,刚开始开了3个并查集,各种关系把我搞得头晕,已提交就是wa,怎么也找不出错误,上网查题解发现是并查集姿势不对!!! 只需开一个并查集,只要能确定关系就扔进并查集里,其中每个元素与老大哥的关系无非三种:同类,被吃,吃人,分别用0,1,2来表示。 那么每来一次判断,先判断两个是否有关系,没关系就肯定是真话,join; 否则就得判断是否说谎; d==1且ta与tb是同类,没说谎 d==2

2016-07-23 11:19:08 359

原创 hdu1829题解(A BUG'S LIFE)简单并查集

题意应该不难理解,Professor Hopper的猜想是任何bug都只会和异性interaction,如果不能确定猜想是否错误,输出No suspicious bugs found!; 如果猜想一定错误,输出Suspicious bugs found! 再解释一下,如果出现两只bug interaction,说明他们是异性,那么出现冲突(出现同性和同性interaction)的话猜想就一定错误

2016-07-22 21:45:43 389

原创 poj1988cube stacking(并查集)

题意:有最多30000个编号为1~30000的箱子,将每个箱子当做一个栈,对这些箱子进行p次操作,每次操作分别为以下两种之一: 1>输入 M x y:表示将编号为x的箱子所在的栈放在编号为y的箱子所在栈的栈顶. 2>输入 C x:计算编号为x的所表示的栈中在x号箱子下面的箱子数目.这道我想了两天都没想出来,刚接触并查集,完全没想到(弱爆了)在find中

2016-07-22 09:52:17 323

原创 poj1952(BUY LOW,BUY LOWER)(dp记录方案个数)

简单说一下题意,就是求最长递减子序列,并且!!!求出总共有多少个不同的最长子序列,比如 9 99 100 97 100 97 100 101 98 96 这组样例中的最长递减子序列长度为3, (用pi表示位于第i个) p2,p3,p9和p2,p5,p9和p4,p5,p9就只能算一个(因为都是100,97,96)。 刚做这道题也是没有什么思路,就直接先敲代码实现全部最长子序列个数(包括相同

2016-07-21 16:00:17 507

原创 Sparse Table算法+poj3264(Balanced line up)题解----倍增思想

题意就是求一段区间的最大值和最小值之差(RMQ问题)。由于查询量大,考虑使用st表(空间复杂度(O(nlogn)),初始化复杂度(O(nlogn)),查询复杂度(O(1))!!!)Sparse Table算法,简称ST算法,可以用来求解RMQ(区间最值查询)问题。 RMQ问题的形式一般是:存在一个大数组,要求对于给定的起点和终点,迅速回答出这段区间的最大值或最小值。 最朴素的方式是扫描起点到终点

2016-07-19 10:55:18 402

原创 poj2082(Terrible Sets单调栈入门题)

题意就是求最大连续矩形的面积。 这道题是poj2559的内涵加强版。 对于一个新的元素 (1)如果此时栈为空或者栈顶元素比新元素小,则该元素入栈; (2)如果栈顶元素与新元素相等,则跳过该元素; (3)如果栈顶元素比新元素大,那么此时需要更新栈顶元素并更新面积,一直到栈顶元素小于该元素为止。#include <iostream>#include <stdio.h>#include <s

2016-07-18 17:21:21 376

原创 hdu4349xiaoming's hope(Lucas定理和位运算)

这道题时间复杂度应为O(log n)。代码其短 刚开始用的是O(n),即一个数一个数判断。lucas定理在这道题p=2, 但事实上lucas(n,i,2)==true等价于(n&i)==i,然而这还是超时。 观察发现,由于求的是i=0~n中满足C(n,i)为奇数的个数。 不妨把n写成二进制,那么(n&i)==i就相当于n的二进制中的1可选可不选,例如7=111(2进制),那么满足的i可以是0

2016-07-17 10:47:04 429

原创 poj2992(Divisors)(阶乘因数分解)

阶乘因数分解

2016-07-17 09:52:58 377

原创 poj2689(Prime Distance两次筛)

两次筛,这里第一次用的是欧拉筛,第二次用的是埃氏筛(似乎第二次只能用埃氏筛)。 for(int i=0;i<=R-L;i++) if(!isnPres[i]) res[l++]=i+L; /* for(int i=L;i<=R;i++)//如果这样写的话就runtime error if(!is

2016-07-04 19:21:37 420

原创 codeforces672Robin Hood(经典二分)

怎么都没想到是二分,我真弱爆了。 二分求出k天后最小的人的财富, 理由: 最小的人的财富必然小于或等于平均数向下取整(记为la), 所以范围在0~la之间,二分答案。 再用二分求出k天后最大的人的财富。相减即得答案。 注意:sum等可能会爆int.#include <iostream>#include <algorithm>#include <string.h>#include <

2016-07-02 20:52:58 314

原创 hdu2824(the Euler Function)

用欧拉筛求出欧拉函数。http://blog.csdn.net/nk_test/article/details/46242311 欧拉函数:在数论中,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。先给出一个结论:设P是素数,若p是x的约数,则E(x*p)=E(x)*p.若p不是x的约数,则E(x*p)=E(x)E(p)=E(x)(p-1).证明如下:E(x)表示比x小的且与x互质的正

2016-07-02 17:41:34 374

原创 poj3518(Prime Grap 欧拉筛+二分)

用欧拉筛打表,二分搜索,过。。。。#include <iostream>#include <algorithm>#include <string.h>#include <stdio.h>using namespace std;#define ms(X) memset(X,0,sizeof(X))bool isnP[1400000];int mprime[110000],t=0;voi

2016-07-02 16:47:30 342

原创 poj2142(THE BALANCE)(扩展欧几里得入门题)

总共要考虑一下三种情况 1. a *x=b*y+d; 2. a*x=b*y-d; 3. a*x+b*y=d;(其中x和y均为非负整数,可由扩展欧几里得算法求得)#include <iostream>#include <stdio.h>#include <algorithm>using namespace std;#define INF 0xffffffftypedef l

2016-07-02 15:04:15 410

原创 hdu1211(RSA)(扩展欧几里得+快速幂+快速乘)

其实题意可以这样理解,已知e,n,F(n),且gcd(e,F(n))=1 求d使得 d*e = 1 mod F(n)。 由扩展欧几里得算法可求出d。 然后给一个整数an,输出 (an)^d (mod n)的对应的字符。(显然快速幂搞定)#include <iostream>#include <stdio.h>#include <algorithm>using namespace st

2016-07-01 21:04:10 377

原创 hdu1576(A/B)扩展欧几里得

由于A必能被B整除,不妨设整数k使得A=B*k, 则A=n(mod 9973)->B*k=n(mod 9973)(i式)。 又B与9973互素,即gcd(B,9973)=1 又即存在整数x,y使得x*B+y*9973=1(ii式)。(x,y可由扩展欧几里得算法求得) 由数论的知识,(i式左右两边同乘x式子依旧成立),即 x*B*k=n*x(mod 9973),结合(ii式)得 (1-y*

2016-07-01 20:22:43 244

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除