摘要: 将坐标离散化后,对于每一个坐标建立一棵动态开节点的线段树,支持查询最大值、和,以及标记下放。#include#includeusing namespace std;typedef pair P;typedef long long ll;const int N=30010,T=300010;struc... 阅读全文
posted @ 2014-11-03 15:14 Claris 阅读(477) 评论(0) 推荐(0) 编辑
摘要: 树形DPf[i][0]表示不向下连边的最大匹配数f[i][1]表示向下连一条边的最大匹配数h[][]表示对应的方案数为了防止爆栈用BFS为了防止MLE:1.数组循环利用,比如存边的数组在存完边后可以用来当dp数组2.BFS时判断哪些点已经走过的bool数组改成bitset3.能不开数组就不开数组,如... 阅读全文
posted @ 2014-11-03 14:13 Claris 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 求出凸包后,矩形的一条边一定与凸包的某条边重合。枚举每条边,求出离它最远的点和离它最左最右的点,因为那三个点是单调变化的,所以复杂度为$O(n)$。注意精度。#include#include#include#define N 50010using namespace std;typedef doub... 阅读全文
posted @ 2014-11-03 07:24 Claris 阅读(413) 评论(0) 推荐(0) 编辑
摘要: 码农题,拆点BFS预处理出所有联通块的面积即可,注意分类讨论。#include#includeusing namespace std;const double pi=acos(-1.0)/4.0;const int N=210;struct P{int x,y,z;P(){}P(int _x,int... 阅读全文
posted @ 2014-11-01 16:53 Claris 阅读(254) 评论(0) 推荐(0) 编辑
摘要: d[x][0]表示x点向下走且回到x点的最少代价d[x][1]表示x点向下走但不回到x点的最少代价d[x][2]表示x点向下走的最长路d[x][3]表示x点向下走的次长路u[x][0]表示x点向上走且回到x点的最少代价u[x][1]表示x点向上走但不回到x点的最少代价一遍树形DP即可ans[i]=m... 阅读全文
posted @ 2014-10-31 09:30 Claris 阅读(661) 评论(0) 推荐(1) 编辑
摘要: 设f[i][j]表示以i为根的子树,i与父亲之间的边染成j的最小代价DP的过程中转移时相当于求一个最小权匹配,用费用流即可感觉复杂度飞起来了…#includeconst int inf=~0U>>2,N=30000,M=1000110,MAXN=160;int n,x,y,i,j;int u[M],... 阅读全文
posted @ 2014-10-28 19:11 Claris 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 将所有炸弹按坐标排序x#include#define N 100010#define M 1700010typedef long long ll;struct P{ll x,r;int id;}a[N];inline bool cmp(P a,P b){return a.xb)a=b;}inline... 阅读全文
posted @ 2014-10-23 13:07 Claris 阅读(472) 评论(0) 推荐(0) 编辑
摘要: RE了几十发,实在没办法了…只好向管理员要数据,然后发现数据规模与题目描述不符…建立Trie并求出DFS序,同时根据DFS序确定字典序然后每次询问相当于询问子树第k小,用主席树维护,注意压缩内存时间复杂度$O(L+n\log w)$,L为所有串长度之和#include#includeconst in... 阅读全文
posted @ 2014-10-17 15:04 Claris 阅读(291) 评论(0) 推荐(0) 编辑
摘要: 旋转坐标系后转化为正方形,$x'=x+y$,$y'=x-y+1000001$,$k'=2k-1$两根扫描线从左往右扫f[i]表示y坐标下边界为i时的价值和每次加入/删除一个点等价于一段区间加减然后查询全局最大值线段树维护扫描线之间的点#include#includeconst int E=10000... 阅读全文
posted @ 2014-10-17 15:00 Claris 阅读(415) 评论(0) 推荐(0) 编辑
摘要: 终于把省选时的遗憾补上了…对于构造立方体:首先BFS构出底层,然后再逐层构造立方体对于计算:$O(n^6)$爆搜即可。#include#includeconst int N=75,M=343010;char ch[N];int n,m,i,j,k,tmp,q[M],t,l,r;int cnt[M],... 阅读全文
posted @ 2014-10-13 16:28 Claris 阅读(537) 评论(0) 推荐(0) 编辑
摘要: f[i]表示以i为结尾的LIS长度对于所有f[i]=1的,由S向i连边对于所有f[i]=maxf的,由i向T连边对于j#includetypedef long long ll;const int N=1410,BIT=12;const ll MOD=(1LLMOD)c.ex[i-1]++,c.ex[... 阅读全文
posted @ 2014-10-05 14:03 Claris 阅读(375) 评论(0) 推荐(0) 编辑
摘要: 替罪羊树套Trie,Trie合并用线段树合并,注意常数优化。顺便AC800题纪念~~~#include#include#includeusing namespace std;const int N=200010,inf=19,M=32000010;struct info{ int v1,v2; ... 阅读全文
posted @ 2014-09-29 20:26 Claris 阅读(465) 评论(0) 推荐(0) 编辑
摘要: 如果没有插入操作,那么直接对DFS序建立线段树套平衡树即可,有插入操作的话,将外层的线段树换成重量平衡树即可。一开始写替罪羊树套权值线段树无限MLE…所以只好写替罪羊树套Treap…#include#include#includeusing namespace std;typedef unsigne... 阅读全文
posted @ 2014-09-18 13:30 Claris 阅读(779) 评论(2) 推荐(0) 编辑
摘要: xy方向分开考虑用扫描线处理出拓扑序,第二问直接回答拓扑序,第一问:将操作倒过来,变成加入线段,用线段树维护区间拓扑序的最值#include#include#include#define N 100010using namespace std;inline void read(int&a){char... 阅读全文
posted @ 2014-09-17 17:32 Claris 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 设f[i][p2][p3][p5][p7][j][k]表示前i位,2,3,5,7的次数,前i位是否等于x,是否有数字的方案数然后数位DP即可,ans=cal(r)-cal(l)#includetypedef long long ll;int n,a[20],len,i,j,m2,m3,m5,m7,t... 阅读全文
posted @ 2014-09-10 16:26 Claris 阅读(422) 评论(0) 推荐(0) 编辑
摘要: 后缀平衡树+线段树。$O(1)$比较大小的标号法真是强大。#include#include#define N 300010#define M 500010using namespace std;typedef unsigned long long ll;const ll inf=1ULL='0')&... 阅读全文
posted @ 2014-09-08 16:31 Claris 阅读(499) 评论(3) 推荐(0) 编辑
摘要: FDUSC前刷刷题吧。。本题每个询问就是说将询问串与主串每个后缀匹配,若匹配成功则结束,否则加上lcp的长度对主串建立后缀树,并用主席树维护DFS序对于每个询问串,找到最后走到的点fin_node(在边上就往下走),并求出完成匹配的后缀的位置match(若匹配成功则是fin_node子树中的最小值,... 阅读全文
posted @ 2014-08-19 16:08 Claris 阅读(430) 评论(0) 推荐(0) 编辑
摘要: 本题就是找一个受力平衡的点我们一开始假设这个点是(0,0)然后求出它受到的力,将合力正交分解后朝着合力的方向走若干步,并不断缩小步长,一步步逼近答案#include#include#define N 10000int n,i;double x[N],y[N],w[N],a,b,sumx,sumy,d... 阅读全文
posted @ 2014-08-16 12:17 Claris 阅读(319) 评论(0) 推荐(0) 编辑
摘要: 题目没有强制在线!考虑离线做法。把操作建立成一棵树的结构,然后按照欧拉序遍历,每次转移要么是一次合并操作,要么是一次撤销合并操作,可以看成是分离操作。用LCT维护集合,合并就是加边,分离就是删边。时间复杂度$O(m\log n)$#include#define N 20010int n,m,i,op... 阅读全文
posted @ 2014-07-31 10:08 Claris 阅读(432) 评论(0) 推荐(0) 编辑
摘要: 同[ZJOI2012]网络,把每个点拆成C个点然后用LCT维护。#include#include#define P make_pair#define N 800002using namespace std;int f[N],d[8002][102],son[N][2],a[N],n;bool rev... 阅读全文
posted @ 2014-07-28 16:28 Claris 阅读(256) 评论(0) 推荐(0) 编辑