Data Structure
文章平均质量分 73
Masamiiiii
这个作者很懒,什么都没留下…
展开
-
hdu 1505 单调栈(最大子矩阵)
点击打开链接预处理每个点作为底边时的最大高,利用单调栈求出该点为底的最长底边#include #include #include #include typedef long long ll;using namespace std;const int N=1e3+20;int n,m;char g[N][N];int h[N][N];//h[i][j] (i,j)为底向上延原创 2016-10-09 10:57:16 · 522 阅读 · 0 评论 -
hdu 5918 暴力kmp
点击打开链接求满足 aq,aq+p,aq+2p,,aq+(m-1)p=b1..bm 的子串数a[i]=b[j] 主串i+=p 则把主串分组 每组长度为a/p,进行kmp匹配即可#include #include #include #include #include #include using namespace std;typedef long long ll;co原创 2016-10-19 15:32:20 · 442 阅读 · 0 评论 -
codeforces 722C 并查集好题+逆序处理
点击打开链接#include #include #include #include using namespace std;typedef long long ll;const int N=1e5+20;int fa[N],n;ll sum[N];//sum[i] i顶点所在的连通块的和 int a[N],del[N];ll ans[N],res;bool join[N]原创 2016-10-06 21:07:51 · 392 阅读 · 0 评论 -
hdu 1506 单调栈求面积
点击打开链接求出 高度h[i]向左和向右最远能扩展到的下标 即利用单调栈 求出h[i]向左(右)最后一个不大于h[i]的下标则以h[i]为高的面积为 h[i]*(R[i]-L[i]+1) #include #include #include #include #include using namespace std;const int N=1e6+20;typedef原创 2016-10-08 16:10:33 · 372 阅读 · 0 评论 -
poj 2796 单调栈(经典)
点击打开链接#include #include #include #include #include using namespace std;const int N=1e6+20;typedef long long ll;ll a[N];int L[N],R[N];//L[i] 以a[i]为最小值:向左最远能扩展到的下标 //则a[i]为最小值的最大区间和= a[i]*(s原创 2016-10-08 16:45:11 · 391 阅读 · 0 评论 -
ARC 065C DayDream Trie+暴力
点击打开链接题意:给出串str问是否能由若干个s串按任意顺序组成思路:对s建立Trie 在Trie上对str进行暴力匹配即可#include #include #include #include #include using namespace std;typedef long long ll;const int N=1e6+20;const int M=30;cha原创 2016-12-10 23:07:47 · 332 阅读 · 0 评论 -
ARC 065D Connectivity 并查集+map
点击打开链接//题意:求出i->j既可以通过roads到达又可以通过railways达到的city数量(自己和本身connect)//先用并查集分好成两组A,B(road,railway),如何快速求出每个i对应的j的数量? ((i,j)在A是联通的&&在B也联通的) //即如果i两组的祖先为x,y j的祖先也为x,y则i->j在两组都即可通过road也可以通过railway(i-原创 2016-12-10 23:12:24 · 434 阅读 · 0 评论 -
poj 1733 Parity game 离散化+带权并查集(区间)
点击打开链接奇数个1 为奇,偶数个1为偶rk[i] :区间 [根节点,i]的奇偶性题意:要判断区间[l,r]的奇偶性是否为k,如果l-1,和r在同一集合中 则要满足rk[l-1]^k==rk[r] 如果不在同一个集合,把小fx的当作根节点 求rk[fy] 画图求即可#include #include #include #include #include using原创 2016-11-22 16:10:01 · 360 阅读 · 0 评论 -
Codeforces 757 C Felicity is Coming! 思维+STL
点击打开链接题意:变换是一个排列f,f[i]为把i变为f[i],(i有n(n容易发现:若x经过变换后为y 则每个gym中x个数是等于y的个数(不好算直接统计出相等的种类).->x所在的gym集合等于y所在的gym集合 (vector[i] 种类i的的gym集合 sort后即可比较)//若把能相互变换的放入一个数据结构中,则该块方法数为S!(S为该块的个数),最后每块方法原创 2017-01-13 12:42:01 · 900 阅读 · 0 评论 -
Codeforces 339D Xenia and Bit Operations 线段树
点击打开链接题意:输入n和m分别表示有2^n个数和m个更新,n,m明显线段树 由于xor和or运算是交替进行的 只要保存子区间的运算方式,即可知道该结点是用那种运算啦#include using namespace std;typedef long long ll;const int N=2e5+50;int a[N];struct node{ int l,r; in原创 2017-02-17 19:36:01 · 607 阅读 · 0 评论 -
hdu 1540 线段树(区间合并入门)
点击打开链接#include #include #include using namespace std;typedef long long ll;const int N=5e4+20;int s[N];struct node{ int l,r; int ls,rs,ms;//左端,右端,最大连续,ms区间最大连续 }a[N<<2]; void build(int l,i原创 2016-10-27 17:04:11 · 299 阅读 · 0 评论 -
codeforces 731C 并查集+贪心
点击打开链接利用并查集把颜色要相同的下标放在同一集合中,贪心:找到每个集合中出现最多的颜色 把剩下的颜色变为该颜色即可 ans+=size-mx#include #include #include #include #include #include #include #include using namespace std;const int N=2e5+10;lo原创 2016-10-16 22:24:00 · 1057 阅读 · 0 评论 -
Codeforces 629D Babaei and Birthday Cake LIS+线段树优化
点击打开链接dp[i]以i结尾的LIS dp[i]=si+max(d[j]) jn令线段1~n代表面积第几小,线段树中保存dp最值,按下标顺序插入即可 #include #include #include #include #include using namespace std;typedef long long ll;const int N=1e5+40;原创 2016-11-06 10:45:58 · 394 阅读 · 0 评论 -
hdu 5441 离线处理+并查集
参考点击打开链接#include #include #include #include #include using namespace std;const int M=2*1e6+20;struct Query{ int x,id; bool operator < ( const Query& a )const { retur原创 2016-09-19 21:02:49 · 368 阅读 · 0 评论 -
hdu 5444 遍历树+模拟
点击打开链接题意:树的结构固定 现在给树的节点赋值 they always number the room number from the east-most position to the west. //先左子树然后根最后右子树:即按照树的中序遍历顺序给树赋值1~nThe sequence is written as follows, it will go straig原创 2016-09-20 14:54:58 · 354 阅读 · 0 评论 -
hdu 1247 Trie入门题
点击打开链接判断有多少单词恰好是由两个单词拼接成#include #include #include #include using namespace std;const int M=26;char s[51000][50];typedef struct Trie{ Trie *next[M];//节点的子树 bool word;//单词节点标记 }Trie;Trie原创 2016-09-20 16:48:32 · 332 阅读 · 0 评论 -
poj 2774 后缀数组(模板题)
点击打开链接模板#include #include #include #include using namespace std;const int M =1e6+20;int len,len1,len2;char s[M];int sa[M];//sa[i]排名i的后缀编号 int c[M];//计数数组 c[i]=j表示关键字<=i的有j个 int t1[M]原创 2016-09-21 19:09:31 · 567 阅读 · 0 评论 -
poj 1743后缀数组入门
http://poj.org/problem?id=1743求最长不重叠字串: 转化为判断性问题求最值 二分长度k 即满足h[i]>=k的后缀为一组 该组中最大编号差>=k则不重叠,满足条件#include #include #include #include const int inf=31000;const int M=20101;int wa[20010],wb[200原创 2016-09-22 13:07:16 · 343 阅读 · 0 评论 -
hdu 1671 Trie(水)
点击打开链接#include #include #include #include using namespace std;const int M=1e4+20;typedef struct Trie{ Trie *next[10]; int pre; bool word;}trie;trie *root;char s[M][11];bool flag;void原创 2016-09-25 21:36:44 · 293 阅读 · 0 评论 -
hdu 3038 How Many Answers Are Wrong 带权并查集
点击打开链接sum[i] 区间 i~fa[i]之和//判断 l~r的和是否为s//只要知道l-1和r是否在同一个集合内即可//在同一个集合内:l~r=sum[r]-sum[l-1] #include #include #include #include #include #include #include using namespace std;typ原创 2016-11-03 16:57:36 · 278 阅读 · 0 评论 -
CF Gym101102C 线段树(最值)+模拟
点击打开链接每次更新 判断名次即:最值编号是否改变 如果改变,则记录改变的时间#include #include #include #include #include using namespace std;const int M=1e5+20;struct Seg{ long long score; int num; }seg[M*4];//节点保存最大值和对原创 2016-09-28 09:01:20 · 598 阅读 · 0 评论 -
Codeforces 633C Spy Syndrome 2(Trie+暴力)
点击打开链接题意:原本有一个串有许多单词,中间用空格隔开,后来把单词全部转换成小写,然后翻转,再把中间的所有的空格全部去掉,就得到了一个全是小写字母组成的串。现在告诉你这样的串,并告诉你字典,要你找出一种满足条件的原串,保证有解。思路:字典逆序插入到Trie中 在原串上暴力匹配并记录每次匹配的单词输出即可#include #include #include #原创 2016-11-04 23:21:15 · 876 阅读 · 0 评论 -
ARC 068E Snuke Line 区间问题+树状数组
点击打开链接题意:Bus从0出发,最多走到M(M枚举一个d,任意一个d把区间分成 M/d段,容易发现若区间长度>=d 则bus至少停在该区间内一次.如果区间长度#include using namespace std;typedef long long ll;const int N=3e5+20;int n,m,c[N];struct node{ int l原创 2017-01-30 17:22:15 · 489 阅读 · 0 评论 -
hdu 4825 Xor Sum 01字典树(入门)
点击打开链接题意给出n个数和m次询问 n,m直接暴力O(nm),显然超时,由于异或和要最大 S从高位到低位的1尽量保持为1,0尽量变为1把n个数写成2进制插入Trie中,S从高位开始尽量找不同即可#include using namespace std;typedef long long ll;const int N=2e5+20; int ch[32*N]原创 2017-03-08 14:47:27 · 366 阅读 · 0 评论 -
ARC 075E Meaningful Mean 枚举+树状数组
点击打开链接题意:n个数,问有多少个区间[l,r]平均数>=k,即满足 a[l]+a[l+1]..+a[r] >= k*(r-l+1) .np[i]为前缀和i,若区间[l,r-1]满足,p[r-1]-p[l-1]>=k*r-k*l , p[r-1]-k*r >=p[l-1]-k*l枚举r(开区间),离散化后,利用树状数组求出,前缀r-1中有多少个l(l=p[l-1]-k*l即可 O原创 2017-06-04 17:37:00 · 380 阅读 · 0 评论 -
Codeforces 712E Memory And Casinos 概率+线段树
点击打开链接Problem E题意:在i点赢的概率为pi win前进一格,lose后退一格,给出两个操作操作1:修改某点的概率操作2:给出[L,R] 问从L出发 在R获胜的概率并且中间不走到小于L点的概率?n,q先不考虑修改 求[L,R]的概率? 设f[i]:从i开始到R获胜(达到R+1的概率)f[L-1]=0,F[R+1]=1f[i]=p[i]*f[i+1原创 2017-06-16 18:02:19 · 378 阅读 · 0 评论 -
Codeforces 813E Army Creation 主席树(在线,求[l,r]内比x大的数的个数)
点击打开链接题意:n个数a[i],q次询问,n,a[i],q每次问[l,r]内最多可以选多少个数,满足同一个数的出现次数不超过k?设b[i] 从i开始数k个和a[i]相同的数的位置,不存在设为n+1;则[l,r] 只要b[i]>r的数都能可以被选上,转化为求区间[l,r]内有多少个数>=r题目要求在线 所以套用主席树 建立权值线段树,前缀i内,第[l,r]大的数有多原创 2017-06-08 20:45:27 · 1486 阅读 · 0 评论 -
Codeforces 600E Lomsat gelral 树上启发式合并
点击打开链接题意:n个结点的树,每个结点颜色为c[i].n启发式合并:一个元素从一个集合被加入另一个集合时, 所在集合的规模至少扩大一倍. 如果没有分离操作且元素数目有限, 合并的次数是logn的.设两个map:col[u][x] 子树u中颜色x的出现次数,sum[u][x] 子树u中出现次数为x的颜色之和dfs时,根据u的子树v来更新col[u][x],暴力更新O(n^2原创 2017-07-06 11:45:59 · 593 阅读 · 0 评论 -
Codeforecs 359D Pair of Numbers 单调栈 OR ST表+二分
点击打开链接题意:n个数a[i],找到最长的一段区间[l,r],存在l如果最大长度有多个,输出所有开头. n法1:枚举a[j] 处理出a[j]的左右边界即可.因为a|b b|c 所以a|c 用单调栈处理边界 O(n)法2:[l,r]中的a[j]为 min(a[l],a[l+1]..a[r]) 要和gcd(a[l]..a[r]) 相等 预处理出min和gc原创 2017-07-07 09:30:23 · 375 阅读 · 0 评论 -
Codeforces 341D Vessels 线段树 OR Set
题意:n个碟子,第i个碟子能装a[i]水,若第i个碟子装满,则多余的水流到下一层碟子,下一层依次类推初始碟子为空,m个操作,op1:第x个碟子装p单位水,op2:询问第k个碟子有多少水.n,m法1:第i个碟子装水,二分最远能流到第x个,用线段树将i~x-1置为0.将x置为res-val.(res=sum[i~x])查询时直接query(x,x) O(nlog^2n) #原创 2017-07-20 11:20:30 · 403 阅读 · 0 评论 -
Codeforecs XOR On Segment 线段树(区间异或,求和)
题意:区间每个数异或X,区间求和,n,m开20个线段树,第i个维护[l,r]内第i位为1的个数即可,ans+=(1lazy标记偶数次时为0.#include using namespace std;typedef long long ll;typedef pair ii;const int N=1e5+20;const ll inf=2e15;ll n,m,a[N];st原创 2017-07-18 22:58:43 · 1329 阅读 · 0 评论 -
Codeforces 665E Beautiful Subarrays (01Trie)
题意:n个元素a[i],问有多少个区间[l,r] 满足a[l]^a[l+1]..a[r] >=k.n枚举区间结尾r,如何快速找到有多少个前缀si满足si^sj>=k?num[u]:记录有多少个前缀经过该结点,查询时保存当前异或和val,若val+(1=k若val+(1=k 相反结点子树中任意个前缀都满足,累加其num[u]后,跳到相同结点上继续查询.O(nlogX)#inc原创 2017-08-02 11:40:14 · 394 阅读 · 0 评论 -
Codeforces 651E Table Compression 拓扑序
题意:给出n*m矩阵a,要求把矩阵a压缩成矩阵b.b的元素尽量小.并且满足下列条件若a[i][j]若a[i][j] 1a[i][j]和其同行同列有着拓扑序,则从a[i][j]最小的开始填,每次维护行/列的最值即可.但同行同列中若有相同的? 把这些同行同列相同的数用放到同一个集合,并查集维护要取的值即可.#include using namespace std;typ原创 2017-08-02 21:43:44 · 408 阅读 · 0 评论 -
Codeforces 103D Time to Raid Cowavans 分块思想
点击打开链接题意:n个数a[i],m次询问n,m直接模拟显然是TLE,由于当y很大时,例如y>=sqrt(n) 模拟一次最坏为O(sqrt(n)) 所以y>=sqrt(n) 直接暴力,这部分为O(nsqrt(n)) 当y #include using namespace std;typedef long long ll;const ll mod=1e9+7;con原创 2017-05-18 18:42:49 · 378 阅读 · 0 评论 -
POJ 2155 Matrix 二维树状数组
点击打开链接题意:n*n矩形 初始元素全部为0 有m个操作,操作1:把某个子矩形内元素反转.操作2:询问某个元素的值 n如果一维的n个元素 反转某个区间 可以直接用一维树状数组暴力修改 f(x,y,c)前x行中的前y列修改成c,修改子矩形等价于操作:f(x2,y2,1)+f(x2,y1-1,-1)+f(x1-1,y2,-1)+f(x1-1,y1-1,1)则利用二维的树状数组 更原创 2017-05-24 10:56:45 · 325 阅读 · 0 评论 -
Codeforces 797E Array Queries 分块思想
点击打开链接题意:给出n个数 aip+a[p]+k 问经过多少次p才能>n?p每次都加上固定的k和变化的a[p],当k>sqrt(n) 则最多循环sqrt(n)次,则可以预处理出k#include using namespace std;typedef long long ll;const int N=1e5+20;int a[N],n,q;int t[500][N]原创 2017-04-17 03:41:14 · 367 阅读 · 0 评论 -
hdu 5536 Chip Factory 01 Trie
点击打开链接题意:t组数据n个数,t,n//先在n个数以二进制形式插入到Trie中,枚举i,j后,暂时在Trie中删除i,j 然后在Trie找到最大的异或值,在插入i,j; O(n^2*32*5) #include using namespace std;typedef long long ll;const int N=2e3+20;ll ch[32*N][2],v[32*原创 2017-03-09 20:16:10 · 268 阅读 · 0 评论 -
BZOJ 2120 数颜色 分块+二分
点击打开链接题意:n个数,m个操作n,m1.查询[l,r]区间内有多少不同的数字2.单点修改 (不超过1e3次)如果利用线段树 单点更新时把x变成y后 不容易更新出[l,r]内不同数个数此时用分块来做,记录每一个数它的上一个位置,不存在则记为0,判断[l,r]内不同的个数,如果a[i]第一次出现在[l,r]内,则ans++ 更新次数若查询区间[l,r] 头尾两块直接原创 2017-03-10 15:18:51 · 408 阅读 · 0 评论 -
BZOJ 4260 REBXOR 异或Trie+dp
点击打开链接题意:给出n个数,n如果先把前缀1..i-1的异或值都插入到Trie中 此时在Trie中查询到与前缀i异或的最大值,即以i结尾最大异或区间.利用dp记录前i个数的最大异或值,枚举第二段区间开头i时,查询后缀i的最大异或值+dp[i-1]即可得到ans #include using namespace std;typedef long long ll;co原创 2017-03-11 13:04:40 · 590 阅读 · 0 评论 -
POJ 3764 The xor-longest path 字典树异或+dfs
点击打开链接题意,一颗n个结点的树,n类似于:只要把1~i-1异或前缀插入到Trie中,即可查询到i结尾的最大异或求出d[u]=root->u的异或值 则u->v路径的异或=d[u]^d[v] 把所有d[i]插入到Trie中,在Trie中查询某个d[u]得到的最大值即为从u出发的最大异或值坑:这题用vector就TLE..#include #include #inclu原创 2017-03-12 13:22:47 · 400 阅读 · 0 评论