02 2018 档案
摘要:"题目链接" 一个圆上顺序排列0,1,...,n 1共n个点,给出m条线段,线段可以从里面连也可以从外面连,问是否能满足所有线段不相交 把每条线段看做一个点,只有在圆外和在圆内两种情况,于是可以把线段拆成i,i',分别表示两种情况 对于端点相交的线段
阅读全文
摘要:题目链接 构建完MST后,枚举非树边(u,v,w),在树上u->v的路径中找一条权值最大的边(权为maxn),替换掉它 这样在 w=maxn 时显然不能满足严格次小。但是这个w可以替换掉树上严格小于maxn的次大边 用倍增维护MST上路径的最大值、次大值,每条非树边的查询复杂度就为O(logn) p
阅读全文
摘要:"题目链接" 若点数确定那么ans = (n 2)!/[(d1 1)!(d2 1)!...(dn 1)!] 现在把那些不确定的点一起考虑(假设有m个),它们在Prufer序列中总出现数就是left=n 2 (d1 1) (d2 1) ... (dn 1) 这left个数本身又有m^{left}种 所
阅读全文
摘要:"题目链接" 先缩点,对于scc之间贡献即为szscc[i] szscc[j] 用f[i][j]表示scci是否能到sccj 拓扑排序,每次把now的f或上to的f 用bitset优化 cpp //63888kb 1080ms include include include include defi
阅读全文
摘要:"题目链接" 日常水题 ~~还是忍不住吐槽这题奇怪的评价~~ cpp include include include define gc() getchar() // define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?E
阅读全文
摘要:"题目链接" 二维莫队,按x,y坐标一起分块.(x,y)的所属的块为 x/sq(n) sq(m) + y/sq(m) 排序时按照(左下点所在块,右上点的标号)排序 排序后 先得出一个询问的答案,然后利用上一个询问的矩形与当前矩形位置关系更新答案 转移真的麻烦。。为了避免算重 一定要加个vis[][]
阅读全文
摘要:"题目链接" 长度为n的数列,m次询问,每次询问一段区间最大的 (重要度 出现次数) 好像可以用莫队做,但是取max的操作普通莫队是不好撤销的(Subd部分) 于是可以用不带删除的莫队: 回滚莫队 询问依旧是按(左端点所在块,右
阅读全文
摘要:"题目链接" 大数除法是很麻烦的,考虑能不能将其条件化简 一段区间[l,r]|p,即num[l,r]|p,类似前缀,记后缀suf[i]表示[i,n]的这段区间代表的数字 于是有 suf[l] suf[r+1]|p (suf[l] suf[r+1])%p = 0 suf[l] ≡suf[r+1] (m
阅读全文
摘要:"题目链接" (同上一题苹果树) 为什么第10个点T了一晚上。。 下面那个却AC了?跑的也不慢。 TLE: cpp / 在DFS序做莫队 当一个点不是另一个点的LCA时,需要加上它们LCA的贡献 / include include include include define gc() getcha
阅读全文
摘要:"题面链接" cpp / 代码正确性不保证。。(不过交了SPOJ没WA T了最后一个点) 在DFS序做莫队 当一个点不是另一个点的LCA时,需要加上它们LCA的贡献 / include include include include define gc() getchar() const int N
阅读全文
摘要:"题目链接" 比较水的题 然而。。 首先可以考虑DFS 每B个分一个块,但是这样链底不会和上边相连 于是考虑从底下开始分,即在DFS完一个点时才将其加入栈中;当子树size==B时出栈 最后在根节点可能会剩下一些未分配的点,这些点数当然 include define gc() getchar() c
阅读全文
摘要:两人轮流走,每次可以从盒子(容量给定)中取出任意堆石子加入Nim游戏,或是拿走任意一堆中正整数个石子。无法操作的人输。10组数据。
阅读全文
摘要:1堆石子有n个。两人轮流取。先取者第1次可以取任意多个,但不能全部取完。以后每次取的石子数不能超过上次取子数的2倍,取完者胜。问谁能赢。
阅读全文
摘要:给定n棵"树","树"的节点可能"挂着"一个环,保证没有环相交,且与树只有一个公共点。
两人轮流从树上删边,删去一条边后,不与根相连的一部分会被移除。最后无法移动的人输。问谁能赢。
阅读全文
摘要:"题目链接" 一个很暴力的想法:每个点拆点,向不能同时存在的连边 但是这样边太多了,而且会有很多重复。~~我不会说我还写了还没过样例~~ 我们实际就是在做一个最大匹配。考虑原图,同在黄/红格里的骑士是互不攻击的,即不会连边。 那么拿这两部分建二分图,分别连向S,T。障碍直接不参与连边。这样边数也少
阅读全文
摘要:有多堆石子, 每次可以将任意一堆拿走任意个或者将这一堆分成非空的两堆, 拿走最后一颗石子的人胜利。问谁会获得胜利。
阅读全文
摘要:有一个一行n列的棋盘,每个人每次往上放一个棋子,将三个棋子连在一起的人赢。问是否有必胜策略。
阅读全文
摘要:"题目链接 洛谷" "COGS.24" 对于大的矩阵可以枚举;对于小的矩阵,需要在满足条件的区域求一个矩形和的最小值 预处理S2[i][j]表示以(i,j)为右下角的CD的矩阵和, 然后对于求矩形区域的最小值,可以先将每行看做一个数列,对于每个点y,得到一个[y (B 3),y]的最小值 处理
阅读全文
摘要:"题目链接" Anti Nim游戏: 先手必胜当且仅当: 1.所有堆的石子数为1,且异或和为0 2.至少有一堆石子数 1,且异或和不为0 简要证明: 对于1:若异或和为1,则有奇数堆;异或和为0,则有偶数堆。比较显然。 对于2:(1)对于只有一堆石子数 1的情况(异或和一定不为0),先手可以操作这堆
阅读全文
摘要:给定一个集合S,每次只能拿S中某个元素个数的石子。每组数据有多组询问,询问给出m堆石子个数,问先手是否必胜。有多组数据。
阅读全文
摘要:"题目链接" cpp //求三堆石子的SG函数,异或起来就是整个游戏的SG值 include include const int N=1005; int n,m,p,cnt,F[N],sg[N+2]; bool vis[N+2]; void Init() { F[0]=F[1]=1; for(cnt
阅读全文
摘要:一个1~INF的坐标轴上有n个棋子,给定坐标Pi。棋子只能向左走,不能跨越棋子,且不能越界(<1)。两人每次可以将任意一个可移动的棋子向左移动一个单位。问先/后手会赢或是否无解。
阅读全文
摘要:"题目链接" 后手必胜(先手必败,P position)当且仅当n堆石子数异或和为0。 首先0一定是P position, 假设a1^a2^a3^...^an=K 若K!=0,则一定可以找到一个ai,ai在K的最高位的1上为1,显然ai ai^K,那么可以把ai变成ai^K,局面就成了a1^a2^.
阅读全文
摘要:Tang,Jiang两人轮流写数,若A在写了X,则B只能写Y,满足1<=Y-X<=k。最先写数的T只能写[1,k]内的数。第一个写的数>=N的lose,问最后的winner。
阅读全文
摘要:"题目链接" 一个国家有1~n座城市,其中一些城市之间可以修建高速公路(无自环和重边)。 求有多少种方案,选择修建一些高速公路,组成一个交通网络,使得任意两座城市之间恰好只有一条路径。 生成树计数 直接上Matrix Tree 无解情况别忘了判 Ma
阅读全文
摘要:"题目链接" 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价。起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边权。 最直接的方法是把每条边作为一个点,对于连接同一个点的两
阅读全文
摘要:"题目链接" 每个点有费用si与价值pi,要求选一些带根的连通块,总大小为k,使得 最大 01分数规划,然后dp,设f[i][j]表示i子树选j个的最大权值和,直接暴力背包转移即可 在枚举子节点选的数量时,假设x有
阅读全文
摘要:[TOC] Some Definations. DFST: 深度优先生成树 二分图 1. 若一个图不存在奇环,那么这是二分图。(二分图中的环只能是偶环,无奇环) 竞赛图 竞赛图: 每对顶点之间都有一条(有向)边相连的有向图。 性质: 1. 竞赛图一定存在哈密顿通路,强连通竞赛图一定存在哈密顿回路。
阅读全文
摘要:"题目链接" 嗯。。水题 洛谷这网络流二十四题的难度评价真神奇。。 cpp include include include include include define gc() getchar() const int N=206,M=15000,INF=0x3f3f3f3f; int n,m,sr
阅读全文
摘要:"题目链接" 将n个村庄连成一棵树,村之间的距离为两村的欧几里得距离,村之间的花费为海拔z的差,求花费和与长度和的最小比值 二分,假设mid为可行的某一生成树的解,则应有 变形得 $\sum(cost m
阅读全文
摘要:"题目链接" 一条直线上有n个村庄,位置各不相同。选择p个村庄建邮局,求每个村庄到最近邮局的距离之和的最小值。 先考虑在建一个邮局,最优解肯定是建在中间。 这样两边对称,距离和是最小的;若建在,(假设与
阅读全文
摘要:"题目链接" 给定一个长为n的序列A,求两个长为n的序列B,C,对任意的i满足B[i]+C[i]=A[i],且B,C序列分别至少有个元素不同。 A中元素各不相同,Ai,Bi,Ci均为非负整数。
阅读全文
摘要:"题目链接" 带修改莫队: 普通莫队的扩展,依旧从[l,r,t]怎么转移到[l+1,r,t],[l,r+1,t],[l,r,t+1]去考虑 对于当前所在的区间维护一个vis[l~r]=1,在修改值时根据是否在当前区间内修改即可。 块大小取,排序依次按左端点所在
阅读全文
摘要:"题目链接" 给出一个长为n的数列,以及n个操作,操作涉及区间询问等于一个数c的元素,并将这个区间的所有元素改为c。 模拟一些数据可以发现,询问后一整段都会被修改,几次询问后数列可能只剩下几段不同的区间了。 那么还是暴力,每个块维护的是整个块是否仅被
阅读全文
摘要:"题目链接" 1.分块(vector)+重构 cpp //直接上vector(本机还是比较慢的...) 某块size较大时O(n)重构 //注意细节 include include include include define gc() getchar() define pb push_back t
阅读全文
摘要:"题目链接" int内的数(也不非得是int)最多开方4.5次就变成1了,所以还不是1就暴力,是1就直接跳过。 cpp include include include include define gc() getchar() typedef long long LL; const int N=5e
阅读全文
摘要:"题目链接" "高斯消元详解"
阅读全文
摘要:"题目链接" 扩展中国剩余定理: "1(直观的)" 、 "2(详细证明)" 。 [Upd:] https://www.luogu.org/problemnew/solution/P4774 cpp include include define gc() getchar() typedef long
阅读全文
摘要:"题目链接" "扩展Lucas" cpp //求C_n^k%m include typedef long long LL; LL FP(LL x,LL k,LL p) { LL t=1ll; for(; k; k =1,x=x x%p) if(k&1) t=t x%p; return t; } vo
阅读全文
摘要:题目链接 Lucas定理 日常水题...sublime和C++字体死活不同步怎么办... 复杂度: 如果能预处理,复杂度为,否则要快速幂为。 当不是质数时,用扩展Lucas,要加CRT,复杂度看起来比较麻烦。。 //想错
阅读全文
摘要:"题目链接" 颓了一天 写个模板吧。。 Chinese_Remainder_Theorem: "MashiroSky" 、 "远航之曲" cpp include include define gc() getchar() typedef long long LL; const int N=13; L
阅读全文
摘要:题目链接 Pollard_Rho:http://blog.csdn.net/thy_asdf/article/details/51347390 https://zhuanlan.zhihu.com/p/267884783 复杂度:,即可以跑
阅读全文
摘要:题目链接: "洛谷" 、 "BZOJ2179" cpp //将乘数拆成 a0 10^n + a1 10^(n 1) + ... + a_n 1的形式 //可以发现多项式乘法就模拟了竖式乘法 所以用FFT即可 注意处理进位 //n位 n位最多就只有2n位了 //putchar的速度。。还是快的 inc
阅读全文
摘要:"题目链接" 模板题都错了这么多次。。 cpp //边权赋到点上 树剖模板 //注意LCA、链的顶端不能统计到答案! include include include define gc() getchar() define lson l,m,rt 1; Build(lson), Build(rson
阅读全文
摘要:"题目链接" 显然我们需要使每个i满足 求这个方程自由元Xi的个数ans,那么方案数便是 %2可以用^代替,不难看出 B[i]=st[i]^ed[i] 如果X[j]=1,假设j会影响i,那么X[j] A
阅读全文
摘要:题目链接: "洛谷" 、 "LOJ" . FFT相关: "快速傅里叶变换(FFT)详解" 、 "FFT总结" 、 "从多项式乘法到快速傅里叶变换" . 5.4 又看了一遍, "这个" 也不错。 2019.3.7 叕看了一遍,推荐 "这个" 。 cpp include include include
阅读全文
摘要:"题目链接" cpp include include include const int N=105; const double eps=1e 10; int n; inline bool bigger(double a,double b) {return std::fabs(a) std::fab
阅读全文
摘要:"https://www.zybuluo.com/SovietPower/note/1016329" "参考原文"
阅读全文
摘要:"题目链接" cpp / 每行每列不能超过2个棋子,求方案数 前面行对后面行的影响只有 放了0个、1个、2个 棋子的列数,与排列方式无关 所以设f[i][j][k]表示前i行,放了0个棋子的有j列,放了1个棋子的有k列,则放了2个棋子的为(m j k)列 则放棋子一共可分为6种情况 不放棋子:1.f
阅读全文
摘要:"题目链接" cpp / 设f[i]表示当前i往后6位没有重复ai的次数,n = ∑a[i] 则 f[i] = a1/n a2/(n 1) a3/(n 2) a4/(n 3) a5/(n 4) a6/(n 5) a7/(n 6) (= (a1 a2 a3 a4 a5 a6 a7)/(n (n 1)
阅读全文
摘要:"题目链接" cpp / 到达一条河时,船在河中的位置是随机的,所以船到达岸边需要的时间在 0~2l/v 均匀分布,所以船到岸的期望为 (0+2l/v)/2 过河需要 l/v 的时间,所以过一条河总的期望为 (0+2l/v)/2 + l/v = 2l/v 陆地上的速度是确定的,可以直接先计算出来 期
阅读全文
摘要:题目链接 ...我找不着了 岛上有t只老虎,1个人,d只鹿。每天随机有两个动物见面 1.老虎和老虎碰面,两只老虎就会同归于尽; 2.老虎和人碰面或者和鹿碰面,老虎都会吃掉对方; 3.人和鹿碰面,人可以选择吃或者不吃该鹿; 4.鹿和鹿碰面,相安无事; 求最后人活下来的最大期
阅读全文
摘要:题目链接 ...无 题目: P1864 [Poetize I]守卫者的挑战 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地。突然,眼前一道亮光闪过。 “我,N
阅读全文
摘要:"题目链接" cpp / 设f[i]为到i的期望得分,c[i]为到i的期望连续长度 则若s[i]=='x',f[i]=f[i 1], c[i]=0 s[i]=='0',f[i]=f[i 1]+2 c[i 1]+1, c[i]=c[i 1]+1 (因为 (l+1)^2 = l^2+2l+1 (l+1)
阅读全文
摘要:"题目链接"
阅读全文
摘要:"题目链接" 下落一个d s的方块,则要在这个平面区域找一个最高的h' 更新整个平面区域的值为h+h' 对于本题,维护最大高度h和all 对于平面的x轴维护一棵线段树t1,每个t1的节点维护对应y轴的两棵线段树t2(h和all) (同一维,需要维护独立的两棵线段树) t1要用标记永久化实现,t2普通
阅读全文
摘要:"题目链接" cpp / 13904K 532ms 最大 环状 子段和有两种情况,比如对于a1,a2,a3,a4,a5 一是两个端点都取,如a4,a5,a1,a2,那就是所有数的和减去不选的,即可以计算总和减最小连续子段和 二是两个端点不都取,如a1,a2,a3,那需要记录最大连续子段和 线段树,令
阅读全文
摘要:"题目链接" cpp //注意取模! include include using namespace std; const int N=1e5+5; int n,mod,Sum[N 1)) aTag[rt]%mod)%mod; Sum[rt 1) aTag[rt]%mod)%mod; aTag[rt
阅读全文
摘要:"题目链接"
阅读全文
摘要:"题目链接" cpp //离散化后范围1~cnt不要错 include include include // define gc() getchar() define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF: SS+
阅读全文
摘要:"题目链接" cpp / 序列上的主席树 某点是利用前一个点的根建树 同理 树上的主席树 某个节点可以利用其父节点(is unique)的根建树 排名可以利用树上前缀和求得: 对于(u,v),w=LCA(u,v),u v这条链的值就是 sum "u root]+sum[v root] sum[w r
阅读全文
摘要:"题目链接" 有一个长为n的序列Ai,要求支持查询[l,r]的最值、历史最值,区间加/重设 线段树,每个点再维护一个历史(从0到现在)最大值、历史(从上次下传标记到现在)最大的set,add标记 PushDown时肯定是先下放历史标记,之后再用当前标
阅读全文
摘要:题目链接: "BZOJ" "洛谷" DP很好写,对于当前的i从之前满足条件的j中选一个最大值, cpp for(int j=1; j include include define gc() getchar() define now node[rt] def
阅读全文
摘要:"题目链接" 无优化版本(170行): cpp / 首先树剖可以维护树上的链Sum、Max 可以对每个宗教建一棵线段树,那这题就很好做了 不过10^5需要动态开点 (不明白为什么nlogn不需要回收就可以 不是每个Insert加log个节点?) 操作修改完更改原数列!盲人。。 / include i
阅读全文
摘要:"题目链接" cpp / 异或只有两种情况,可以将序列放到01Tire树上做 在不异或的情况下在Tire上查找序列的mex很容易,从高位到低位 如果0位置上数没有满,则向0递归;否则向1 (0位置上的数都满了 即 其子树叶子节点都有值) 异或情况下 若x在当前位有1,则反转0/1继续走 由于异或具有
阅读全文
摘要:"题目链接" 有一片n亩的土地,要在这上面种草。 在每一亩土地上都种植了一种独一无二的草,其中,第亩土地的草每天会长高厘米。 一共会进行次收割,其中第次收割在第天,并把所有高度大于等于的部分全部割去。求每次收割得到的草
阅读全文
摘要:"题目链接" 或者 "这" 吧。。 被数据坑了 cpp / 操作按左端点排个序 依次进行即可 不是很懂 为什么不写Build 而在Add时改mp[rt]=p 会WA(too short on line 251..) 找到Reason了。。Modify下界写错 那么为什么单点修改正确性会被下界影响。。
阅读全文
摘要:"题目链接" 首先考虑询问[1,n]怎么做 设 f[i][0/1]表示[1,i]以0/1结尾的不同子序列个数 则 $\ \ if(!A[i]) f[i][0] =
阅读全文
摘要:"题目链接" cpp / 求异或和,容易想到,如果同一个数异或偶数次相当于0 ∑ai还不大,那想一下每个子集和出现多少次,显然只需要知道次数的奇偶,可以用bitset bit[i]=0/1表示子集和为i出现了偶数次/奇数次 有个简单的dp方程: f[x+a[i]]+=f[x] 对于一个x,bit(注
阅读全文
摘要:"题目链接" "主要思路" cpp / 对于询问1,用堆代替multiset/Splay 对于询问2,multiset 1.注意哨兵元素 2.注意multiset中删除时是删除某元素的一个位置,而不是这个元素!这个值会全部都删掉 / include include include include c
阅读全文
摘要:"题目链接" "主要思路" cpp / 其实只需要multiset即可 对于询问1,删除、插入差值,输出最小元素 对于询问2,插入后用前驱后继更新 1.注意哨兵元素 2.注意multiset中删除时是删除某元素的一个位置,而不是这个元素!这个值会全部都删掉 不开O2慢成狗 开了也不是很快 / inc
阅读全文
摘要:"题目链接" cpp //输出ht见UOJ.35 include include include const int N=1e6+5; int n,tm[N],t1[N],t2[N],SA[N],rk[N],ht[N]; //SA[i]=j:排名为i的后缀开头的下标为j //rk[i]=j:以下标i
阅读全文
摘要:"题目链接" cpp / 分块。对于块之外的,暴力修改、查询; 对于一整块内的,修改后sort使每一块块有序,询问时二分 =C的位置求个数 / include include include include using namespace std; const int N=1e6+5; int n,
阅读全文
摘要:"题目链接" cpp / 数列的最大值保证 include include include using namespace std; const int N=5e4+5; int n,m,k,size,A[N],times[N]; long long ans[N],now; struct Ques
阅读全文
摘要:"题目链接 COGS" "BZOJ2120" "洛谷P1903" cpp / Add和Subd函数中的vis不能直接设为=1或=0 比如 l=1,r=0 l=3,r=5 时,[1,5]的vis标记全都是1 所以要进行取反 / include include include include using
阅读全文
摘要:题目链接: "COGS" 、 "BZOJ3236" Upd: 树状数组实现的是单点加 区间求和,采用值域分块可以修改查询。同 "BZOJ3809" . 莫队为次修改和次查询。 注意这两个需求并不平衡,所以在搭配数据结构时常使用分
阅读全文
摘要:"题目链接"
阅读全文
摘要:"题目链接" cpp include include include include using namespace std; const int N=1e5+5; define LL long long int n,belong[N],size; LL A[N],sum[N],tag[N]; in
阅读全文
摘要:"题目链接" cpp include include include include using namespace std; const int N=1e5+5; int n,m,A[N],size,belong[N],sum[N]/ 某块的总和 /,tag[N]/ 某块的加标记 /; inlin
阅读全文
摘要:"题目链接" cpp / 如果用线段树,每个节点要再开k的空间,显然不行。但是分块可以(虽然空间依旧爆炸) 分块。用bloans[i][j]表示 第i块 模k为j 的有多少个 对于不是整块的,查询时应判断 A[i]+tag[belong[i]] ==k || ==0 对于整块,维护两个tag,一个是
阅读全文
摘要:"题目链接" cpp / 25832 kb 26964 ms 莫队+树状数组:增加/删除/查询 都是O(logn)的,总时间复杂度O(m sqrt(n) logn),卡不过 莫队+分块:这样查询虽然变成了sqrt(n),但是修改是O(1)的 考虑对权值进行分块 细节... / include inc
阅读全文
摘要:题目链接 [Update] 这是一个暴力,DP正解见 https://www.luogu.com.cn/blog/fusu2333/solution-p2292 ,同样是利用fail递推,并利用串长只有10,可能匹配位置只有10的性质。 /* 简单的DP,查找是否有字典中的单词时在Trie树上做 要
阅读全文
摘要:"题目链接" 给出n个字符串,问重定义英文字符的顺序(即字典序),有哪些单词可能排在第一 一个单词想要排在第一,首先是没有其它字符串是它的前缀。那么建一棵Trie树 其次,它字符的优先级要比和它有着相同前缀的要高。 也就是说,对于同一个父节点下,这个
阅读全文
摘要:"题目链接" 还是80分,不是很懂。 cpp / 七个操作(用左偏树)(t2表示第二棵子树): 1.合并:直接合并(需要将一个t2中原有的根节点删掉) 2.单点加:把这个点从它的堆里删了,加了再插入回去(有负数)(它可能成为这一个堆的根,所以也要从t2中删除再插入) 3.整个连通块加:根节点打标记(
阅读全文
摘要:"题目链接" "左偏堆学习 推荐" cpp include include include define gc() (SS==TT &&(TT=(SS=IN)+fread(IN,1,1val[B]||(val[A]==val[B]&&A B)) std::swap(A,B); son[A][1]=M
阅读全文
摘要:"题目链接" cpp //注意树剖一条链上或一棵子树内的编号是连续的 //建树时用的是第二次dfs得到的序列 //不要频繁转longlong include include include // define gc() getchar() define gc() (SS==TT&&(TT=(SS=I
阅读全文
摘要:"题目链接"
阅读全文
摘要:"题目链接" st(n)表示sqrt(n) 为使块状链表不会退化,通常将每块的大小S维持在[st(n)/2,2st(n)]中,这样块数C也一定[st(n)/2,2st(n)]中 在此使用另一种方法(方便)维持这种性质:保证任意相邻两块的size相加 st(n),并且每块大小 include incl
阅读全文
摘要:"题目链接" Update:这种分块写法...可以被卡掉啊... 好像没有靠谱的树分块写法... cpp / 对树上节点进行分块,每个点记录dep,fa,val,Max,Sum,Max,Sum表示当前点在该块内的子树中权值最大值与和 节点i各值表示从root[i]到i一段路径的的对应值。因为求值时应
阅读全文
摘要:"题目链接" 洛谷上惨遭爆零是为什么。。 另外这个树分块算法是假的。 cpp / 插入删除只涉及一个数,故每次可以枚举一遍,而不是重构完后sort / include include include include define gc() getchar() const int N=6e4+5; c
阅读全文
摘要:"题目链接" 第一次写(2017.11.7): 第二次写(2017.12.3): cpp include include const int N=1e5+5; int n,root,size,sz[N],cnt[N],t[N],son[N][2],fa[N]; inline int read() {
阅读全文
摘要:"题目链接" 查找排名为k的数用平衡树 合并时用启发式合并,把size小的树上的所有节点插入到size大的树中,每个节点最多需要O(logn)时间 并查集维护连通关系即可 O(nlogn insert time) 据(主席)说按顺序插入能做到均摊O(1),中序遍历即可有序插入 1.并查集与平衡树是独
阅读全文
摘要:"题目链接" cpp //模板吧 include include include using namespace std; const int N=40000,INF=1e8; int n,size,root,sz[N],cnt[N],t[N],son[N][2],fa[N]; inline int
阅读全文
摘要:"题目链接" cpp / BZOJ1503: 3164kb 792ms/824ms(新建节点) 洛谷 : 3.06mb 320ms/308ms(前一个要慢wtf 其实都差不多,但前者好写) 四种操作: A:所有元素加v。直接TAG+=v即可 S:所有元素减v。TAG =v,如果TAG0,可是v已经要
阅读全文
摘要:"题目链接" or "Here" 题意:n个数,有两个操作:1.修改某个数为v;2.询问一段区间第k小的数 如果没有修改,则可以用线段树,每个节点P[a,b]存储大小为b a+1的数组,代表其中的数 同时,这个数组还是要排好序的 直接找答案很不方便,于是考虑对数组二分答案,求比它小的数的个数 关于构
阅读全文
摘要:"题目链接" 附纯SplayTLE代码及主要思路: cpp / 可以看做序列有n段,Insert是每次在每一段最后插入一个元素 只有插入,没有删除,所以插入一个元素对于询问1影响的只有该元素与前边一个元素(同段)、下一段的开头元素 故只需删掉该段最后元素与下一段开头元素的差,再加入新元素与下一段开头
阅读全文
摘要:"题目链接"
阅读全文
摘要:"题目链接" cpp / 任意组合土地好像很难DP 对于同一组,价值为max{ai} max{bi},显然长宽都小于这个的土地是不会算入结果的 由于是都买,所以所有会被包含的土地都不会算入结果 先按Ai、Bi升序排序,第一关键字Ai,那么对于B[i 1] include include define
阅读全文
摘要:"题目链接" 2017.12.24 第一次写: 时间: 2316ms (1268ms) 空间: 19.42MB (19.5MB)(O2) 注:洛谷测的时间浮动比较大 2018.2.26 第二次写: (简化许多)(两份实际行数倒差不多) 时间: 2008ms (1536ms) 空间:19.51MB (
阅读全文
摘要:题目链接 //注意反转时先分裂r,因为l,r是针对整棵树的排名 #include<cstdio> #include<cctype> #include<algorithm> //#define gc() getchar() #define gc() (SS==TT&&(TT=(SS=IN)+fread
阅读全文
摘要:"题目链接" 第一次(2017.12.24): cpp include include include // define gc() getchar() define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF: SS+
阅读全文
摘要: wolfram alpha(手机APP:wolfram alpha app可以免费查看过程) OEIS(在线整数数列查询网站) GeoGebra(解方程,画函数图像,绘制图形,分析数据,探讨3D数学!) 在线绘图 绘制函数图像:https://www.desmos.com/c
阅读全文
摘要:题目链接 注: 刚学 可能过程有疏漏,仅供参考(其实我不是很懂这里是否需要证决策单调)。 (当然不用斜率表示用推式子的方法解已经不太合适了。。) 抽象下问题,即将一个序列分成任意多段,设表示以作为一个右端点时的最小值,则$f[r]=f[l]+
阅读全文
摘要:"题目链接" 斜率优化 不说了 网上很多 这的比较详细 " Click Here " or "Here"
阅读全文
摘要:"题目链接" 给定一个个数的序列,最多将序列分为段,每段的价值是这段中所有数两两相乘的和。求最小总价值。 ~~写到这突然懒得写了。。~~ 丢个 "题解" ~~走人~~ cpp / 朴素O(n^3):f[i][j]表示当前在i分了j段的
阅读全文
摘要:"题目链接" 一棵n个点的树,每次可以选择树上两个叶子节点并删去一个,得到的价值为两点间的距离 删n 1次,问如何能使最后得到的价值最大,并输出方案 树上距离,求最大,可以考虑下树的直径 假如已知树的直径u v,那么任意一点x到达其他点的最远距离就是
阅读全文
摘要:选段不相交的区间,使其权值和最大。
阅读全文
摘要:"题目链接" cpp / 每一天的餐巾需求相当于必须遍历某些点若干次 设q[i]为Dayi需求量 (x,y)表示边x容y费 将每个点i拆成i,i',由i' T连(q[i],0)的边,表示求最大流的话一定要流满q[i] 对于i,由S i连(q[i],0)的边,表示满足Dayi需求后最多还能给出q[i]
阅读全文
摘要:"题目链接" cpp / 同"修车":对于每个厨师拆成p个点表示p个时间点,每个人向m个厨师每个时间点连边 这样边数O(nmp)+网络流 ≈O(nm p^2)(假设SPFA线性) = GG 可以发现这O(nmp)条边大多数是用不到的 所以可以只建少量边,每增广一条路加O(n)条边 复杂度就是O(nm
阅读全文
摘要:"题目链接" 上下界费用流: 最小路径覆盖:
阅读全文
摘要:"题目链接" cpp / 神tm看错题 2。。 假如人员i依次维修W1,W2,...,Wn,那么花费的时间是 W1 + W1+W2 + W1+W2+W3... = W1 n + W2 (n 1) + ... + Wn 1 即车j是第a个修的 产生的贡献是(n a+1) t[i][j] 车j是倒数第a
阅读全文
摘要:"题目链接" cpp //裸最大权闭合子图... include include include define gc() getchar() const int N=55005,M=N
阅读全文
摘要:"题目链接" 最小化最大的一条边,二分答案。然后就变成了给一张无向图定向使其为欧拉回路 二分答案后对于一个位置的两条边可能都保留,即双向边,需要给它定向;可能只保留小的一条,即单向边,不需考虑 如何给它定向呢,或者说怎么形成欧拉回路呢 形成欧拉回路的充要条件:弱连通图;每个点出度=入度 记点i的度数
阅读全文
摘要:"题目链接" 枚举时间 每一个时间点 对于每个之前的位置像当前位置连边,表示这一时刻可待在原地 每艘船 之前时刻位置向当前时刻连边 注意别漏了0时刻src连向earth的边
阅读全文
摘要:"题目链接" 有源汇有上下界最小流 Sol1. 首先和无源汇网络流一样建图,求SS TT最大流; 然后连边(T S,[0,INF]),再求一遍SS TT最大流,答案为新添加边的流量 无解情况: 连边后再求最大流+之前的最大流 != ∑dgr "" 解释: 第一次最大流已经满足下界,满足下界的情况下能
阅读全文
摘要:"题目链接" http://blog.csdn.net/just_sort/article/details/75448403 有源汇有上下界网络流 通过添加一条(T S,[0,INF])的边变成无源汇 Sol1. 添加(T S, "0,INF])的的边后,按无源汇最大流建图,跑一遍SS TT的最大流
阅读全文
摘要:"题目链接" 参考:http://blog.csdn.net/clove_unique/article/details/54884437 http://blog.csdn.net/wu_tongtong/article/details/73320968
阅读全文
摘要: "参考" 对于每个点,向唯一有可能与它形成MST的8个点连边,由于是双向单边,所以每个点最多连出4条边(证明见 "blog" ) 怎么找到一个区域内最近的点? 只考虑y轴右侧45°的区域,其余部分可以通过坐标变换移动到这一区域 设当前点P(x0,y0),这一区域一点P1(x1,
阅读全文