数据结构
Gipsyu
这个作者很懒,什么都没留下…
展开
-
2019 Xuzhou Online Contest Problem I Query
很脑残的写了主席树,其实树状数组就能解决#include<bits/stdc++.h>using namespace std;const int N=2e5+10;inline void read(int &x){char ch;bool ok;for(ok=0,ch=getchar();!isdigit(ch);ch=getchar()) if(ch=='-')...原创 2019-09-11 16:23:23 · 171 阅读 · 0 评论 -
BZOJ3173 Rope&&BIT
突然发现有rope这样一个神奇的东西实现原理好像是块状链表然后套BIT就好#include<bits/stdc++.h>#include<ext/rope>#define rope __gnu_cxx::ropeusing namespace std;const int N=1e5+10;int ans[N];struct BIT{ int T[...原创 2019-02-08 17:08:13 · 206 阅读 · 0 评论 -
BZOJ 3172 HASH&&FIND
看见网上题解全是AC自动机HASH应该也可以吧洛谷上HASH过了bzoj交后不到1s告诉我超时,你的时限可是10s啊(雾后来想了一下,应该是空间开太大了HASH代码:#include<bits/stdc++.h>using namespace std;typedef unsigned long long ll;const int N=1e6;ll p[...原创 2019-02-08 15:40:29 · 155 阅读 · 0 评论 -
BZOJ2957 线段树
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+10;struct SegmentTree{ int l,r,ans;double val; #define l(x) Tree[x].l #define r(x) Tree[x].r #define ans(...原创 2019-02-08 11:11:09 · 433 阅读 · 0 评论 -
牛客练习赛34 F 主席树
这题和我之前做的mex原理等价比赛的时候虚树开的太长了爆内存的时候返回的wa我一直以为是代码写的有问题其实权值线段树的长开n+1就够了代码只有39行#include<bits/stdc++.h>using namespace std;const int N=3e5+10;struct ContinueTree{ int l,r,Min,sum;...原创 2018-12-14 22:30:32 · 463 阅读 · 0 评论 -
BZOJ3524 主席树
大水题本来这个主席树写的是bzoj2489,结果发现是个假算法然后顺手改了改把这道题A了最近写主席树越来越6了呢#include<bits/stdc++.h>using namespace std;const int N=5e5;int A[N+10],tot,R[N+10];struct HisTree{ int l,r,sum; #define l(x...原创 2018-12-09 11:37:07 · 292 阅读 · 0 评论 -
BZOJ5301 莫队
#include<bits/stdc++.h>using namespace std;const int N=2e5+10;int block,pos[N],A[N],k,ans,B[N],ANS[N]; struct Query{ int l,r,id; bool operator <(const Query a) const{ ret...原创 2018-12-13 21:37:35 · 154 阅读 · 0 评论 -
BZOJ4260 Trie
字典树完美解决#include<bits/stdc++.h>using namespace std;const int N=4e5+10;int T[N<<5][2],A[N],B[N],C[N],tot;void insert(int x){ int p=1; for(int i=1<<30;i;i>>=1){ int y=(...原创 2018-12-13 09:31:20 · 279 阅读 · 0 评论 -
Python 版线段树
class Tree(object): def __init__(self,l,r): self.l=l self.r=r self.value=0 mid=(l+r)/2 if(l<r): self.left=Tree(l,mid); self.righ...原创 2018-12-05 22:29:53 · 1129 阅读 · 1 评论 -
BZOJ3732 LCA
倍增同时维护链上最大#include<bits/stdc++.h>using namespace std;const int N=1e5+10;int head[N],Next[N],ver[N],edge[N],mf[N][20],f[N][20],d[N],fa[N],tot,t;queue<int> q;struct P{ int x,y,z;}A...原创 2018-12-12 14:42:57 · 127 阅读 · 0 评论 -
BZOJ 4553 CDQ
本质是对时间的分治 #include<bits/stdc++.h>using namespace std;const int N=1e5+10;struct P{ int l,r,val,id;}A[N];bool cmp1(P a,P b){return a.l<b.l;}bool cmp2(P a,P b){return a.val<b.val...原创 2018-12-02 10:49:22 · 151 阅读 · 0 评论 -
Codeforce Round 524 F 可持久化线段树
好题 #include<bits/stdc++.h>using namespace std;const int N=3e5+10;struct SegmentTree{ int p,l,r,Max;}T[N*20];int cnt,R[N],n,m,k;void insert(int &root,int l,int r,int x,int val){...原创 2018-11-25 19:38:35 · 159 阅读 · 0 评论 -
BZOJ3211 线段树
一道很早之前就见过的题,一直没写过暴力更新打标记就ok#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+10;ll A[N];struct SegmenTree{ struct segmenttree{ int l,r;ll val;bool over...原创 2019-02-08 18:31:15 · 209 阅读 · 0 评论 -
NowCoderOI周赛7B SparseTable
#include<bits/stdc++.h>using namespace std;const int N=1e5+10;int val[N],ans;struct SparseTable{ int f[N][20]; void build(int n){ for(int i=1;i<=n;++i)f[i][0]=i; ...原创 2019-02-23 00:50:49 · 146 阅读 · 0 评论 -
BZOJ1954&&POJ3764 Trie
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;const int N=3e5+10;int val[N],ver[N],Next[N],head[N],edge[N],tot;void add(int x,int y,int z){ ver[...原创 2019-02-20 18:55:29 · 145 阅读 · 0 评论 -
2019 Xuzhou Online Contest Problem G Colorful String
回文树#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=3e5+10;int NUM[N][30];int check(int l,int r){ int ans=0; for(int i=1;i<=26;++i)if(NUM[r][i]>N...原创 2019-09-11 16:20:38 · 158 阅读 · 0 评论 -
2019 Nanchang Online Contest Problem I Yukino With Subinterval
将每个连续的最右端赋值权值1,需要写带修改的主席树,我没写过拿CDQ分治水过这题居然是全场AC最少的题目,我一个半小时搞定(其实是因为写主席树写了一半发现不会写,改成了CDQ分治)#include<bits/stdc++.h>using namespace std;#define maxn 2000005int s,w,n,cnt;int ans[maxn],sum[...原创 2019-09-11 16:11:22 · 190 阅读 · 0 评论 -
HDU 6599 Palindromic_Automaton
回文自动机插入的时候判断合法性#include<bits/stdc++.h>using namespace std;typedef unsigned long long ll;const int N=3e5+10;ll p[N],FH[N],BH[N];ll getF(int l,int r){return FH[r]-FH[l-1]*p[r-l+1];}ll get...原创 2019-07-28 18:20:52 · 218 阅读 · 0 评论 -
LuoGu P5357 AC Automaton+Fail树上dfs
上一题的加强版#include<bits/stdc++.h>using namespace std;const int N = 2e6+10;int ans[N];struct Aho_Corasick_Automaton { int ch[N][26], f[N], val[N], sz, rt; int newnode() { memset(ch[sz...原创 2019-07-28 16:01:22 · 160 阅读 · 0 评论 -
LuoGu P3796 Aho Corasick Automaton
这个做法其实有问题的,能过是因为给的数据范围有点怪,完全可以加强数据范围卡掉最好的做法是在find时在fail树上打标记,最后bfs#include<bits/stdc++.h>using namespace std;const int N = 1e6;int ans[N];struct Aho_Corasick_Automaton { int ch[N][2...原创 2019-07-28 15:15:37 · 175 阅读 · 0 评论 -
LuoGu P3808 Aho Corasick Automaton
字符串经典算法#include<bits/stdc++.h>using namespace std;const int N = 1e6 + 10;struct Aho_Corasick_Automaton { int ch[N][26], f[N], val[N], sz, rt,v[N]; int newnode() { memset(ch[sz], -1...原创 2019-07-28 09:50:01 · 152 阅读 · 0 评论 -
HDU 6579 Operation Linear Basis
带位置信息的线性基#include<bits/stdc++.h>using namespace std;const int N=1e6+10;int A[N];struct Linear_Basis{ int d[30],p[30]; void ins(int x,int pos){ for(int i=29;i>=0;--i){ ...原创 2019-07-23 09:29:52 · 173 阅读 · 0 评论 -
Codeforces 1195F Geometers Anonymous Club
可以写树状数组,这里直接写的线段树#include<bits/stdc++.h>using namespace std; const int N = 1e5 + 10;struct SegmentTree { int l, r, sum, f; #define l(x) Tree[x].l #define r(x) Tree[x].r #def...原创 2019-07-18 08:05:10 · 479 阅读 · 0 评论 -
Codeforces 1194E Count The Rectangles
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int M=5e3+1,N=1e4+1;vector<array<int,3> >V,H;int T[N+10];int lowbit(int x){return x&(-x);}void add(i...原创 2019-07-15 09:03:57 · 262 阅读 · 0 评论 -
2018 ACM NanJing Mediocre String Problem
#include<bits/stdc++.h>using namespace std;const int N=1e6;typedef unsigned long long ll;char s[N+100],t[N+100];ll P[N+100],Ps[N+100],Ns[N+100],Pt[N+100];int lens,lent;long long sum[N+10...原创 2019-07-14 14:10:54 · 147 阅读 · 0 评论 -
BZOJ3011 树上倍增
为什么很多人都拿左偏树来写这道题好像没什么人写倍增觉得倍增写起来更简单点#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=5e5+10;const ll inf=1ll<<60;int head[N],Next[N],ver[N],A[N],f[N]...原创 2019-02-21 10:29:50 · 197 阅读 · 0 评论 -
HDU 6430 DSU
竟然A了 23333,复杂度真的是玄学最大复杂度n根号loglog,但其实复杂度远没这么大,后来一想A了正常首先,复杂度计算的是错的,没有根号,n即是最大约数的个数第二,考虑到轻链一开始是很小的,而1e5以内的约数个数最多的数只有60+个约数第三,轻链在向重链合并的时候,很多因数是被重复的,计算量大大减小,或者换一种理解方式,很难打满1e5个因数。以后感觉树上做不了的题,都拿D...原创 2018-10-25 20:54:40 · 185 阅读 · 0 评论 -
CodeForces 600E DSU算法
DSU:基于轻重链的树上启发式合并,一个巨优美的暴力,复杂度log级别的,原因的一颗树的重链数是log的,每个点最多向每个重链更新一次。附一个链接:http://codeforces.com/blog/entry/44351这个算法的思想就是,一个有规划的暴力,除去了普通n^2暴力的许多多次计算的部分,每一个重边开一个map暴力记录,让一棵数的轻边始终向重边更新。#include&l...原创 2018-10-25 17:04:12 · 491 阅读 · 0 评论 -
CodeForce961E 思维加树状数组
http://codeforces.com/problemset/problem/961/E一看这种题就知道用树状数组一开始推错了后来才发现一开始的算法有问题其实不是太难吧不太明白为什么是E题需要一点点思维有一点树状数组求逆序对的感觉AC代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;ll n;...原创 2018-04-13 22:32:25 · 190 阅读 · 0 评论 -
BZOJ2863&&BZOJ1176 CDQ分治
1176:https://www.lydsy.com/JudgeOnline/problem.php?id=11762683:https://www.lydsy.com/JudgeOnline/problem.php?id=2683一模一样的两道题算法不是什么二维树状数组是CDQ分治什么是CDQ?OI金牌女选手陈丹琦的首拼厉害吧我也是刚刚学会CDQ分治核心思想是用分治的离线算法把二维才能解决的问题...原创 2018-04-13 16:22:55 · 220 阅读 · 0 评论 -
BZOJ1007 凸包
https://www.lydsy.com/JudgeOnline/problem.php?id=1007比较简单的一道凸包问题:拿单调栈来维护:AC代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=5e4;inline void read(int &x){cha...原创 2018-04-04 23:36:12 · 172 阅读 · 0 评论 -
BZJO2086
http://www.lydsy.com/JudgeOnline/problem.php?id=2086这道题我一开始非常自信的写了一发二分答案WA!!!!what the fuck????后来找了半天也没找着bug因为代码实现非常简单二分答案我又写了无数次十分有信心心中小声想可能是算法的问题但又不知道算法哪里有问题于是就问了宫涵韵和大奶牛学长其实两个人是一个人后来才理解这题根本没法二分答案因为看...原创 2018-03-28 17:05:21 · 198 阅读 · 0 评论 -
POJ3264
https://vjudge.net/problem/POJ-3264裸线段树#include<iostream>#include<stdio.h>using namespace std;typedef long long ll;const int N=50000;int A[N];inline void read(int &x){char ch;boo...原创 2018-03-27 16:05:42 · 369 阅读 · 0 评论 -
HDU1540
http://acm.hdu.edu.cn/showproblem.php?pid=1540这题明摆着是线段树的区间合并但是我感觉二分更优雅所以我二分加树状数组配上读入挂700msA了#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5; inline void read(...原创 2018-03-27 15:47:59 · 407 阅读 · 0 评论 -
BZOJ4756
其实一开始我没想出来只是想出了dfs序但后边就卡壳了然后看了题解恍然大悟其实就是一道挺水的题你先把dfs序找出来用树状数组来统计第一次入栈的时候统计比他大的树第二次出栈的时候统计比他大的树然后第二次减去第一次就是答案很有意思#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll N=2e5;...原创 2018-03-26 18:07:01 · 248 阅读 · 0 评论 -
BZOJ3324 平衡树
http://www.lydsy.com/JudgeOnline/problem.php?id=3224人生第一次写平衡树太恐怖了#include<bits/stdc++.h>using namespace std;typedef long long ll;const int SIZE=100010;struct Treap{ int l,r,val,dat,cnt,s...原创 2018-03-21 20:47:23 · 335 阅读 · 0 评论 -
POJ2528
因为给的数值比较大所以要离散化然后倒着来用线段树来维护看有没有新的点需要改AC代码:#include<iostream>#include<algorithm>#include<vector>#include<cstring> using namespace std;typedef long long ll;vector<int>...原创 2018-03-25 16:49:27 · 129 阅读 · 0 评论 -
HDU3974
http://acm.hdu.edu.cn/showproblem.php?pid=3974先把树的dfs序搞出来然后区间更改单点查询很有意思AC代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=2e5+10;int head[N],Next[N],ver[N],B[N]...原创 2018-03-25 15:58:13 · 428 阅读 · 0 评论 -
POJ2104 主席树
http://poj.org/problem?id=2104今天入门半年的ACM辣鸡终于搞懂了主席树其实主席树也没有那么难以前一直学不会大概是没有意志把它学下去或者说是内心比较浮躁总是看不下去别人的blog下边的一个板子是我从网上找的比较漂亮的一个板子当然我自己是写不出来的明天来学习带修改的主席树好像要附加上树状数组如果可以单位时间访问每个节点的话其实可以在查询的时候直接二分当然了树状结构的查询思...原创 2018-03-13 23:31:47 · 218 阅读 · 0 评论 -
Young tableaus(杨氏矩阵)的分析
简介 杨氏矩阵是在很多面试和讨论中用到比较多的一个话题。它本身独特的构造使得它的一些增删查改的操作和堆排序以及二分搜索的思想很类似。它本身问题不难,实际操作的时候会稍微有点繁琐。问题 假定我们有一个mxn的矩阵,它的每一行以及每一列都是排好序的。我们可以称这个矩阵为Young tableaus(杨氏矩阵)。在这个矩阵里,可以有某些元素不存在的情况,也就是说,这些位置的值被设置为无穷大(...转载 2018-05-03 20:34:42 · 322 阅读 · 0 评论