摘要: 首先预处理出[1,i]的答案设nxt[i]表示i下一次出现的位置随着左端点l往右移,[l+1,nxt[l]-1]里答案都减去它的价值,[nxt[l],nxt[nxt[l]]-1]里答案都加上它的价值线段树维护#include#define N 1000010typedef long long ll;... 阅读全文
posted @ 2014-11-17 21:06 Claris 阅读(478) 评论(0) 推荐(0) 编辑
摘要: NOIP前做了几道POI,现在终于能在BZOJ上提交了…交上去最后几个点WA,看了数据发现p=0的特判错了…p=0,1时特判p=2时构造两种情况判断p=3时不考虑1的座位进行DP可以发现对于i+1的位置安排,我们只关心i-2,i-1,i的相对顺序以及它们的相邻、边界情况所以设f[i][j][S1][... 阅读全文
posted @ 2014-11-17 21:05 Claris 阅读(849) 评论(0) 推荐(1) 编辑
摘要: 考虑枚举右端点,用线段树维护[i,nowr]的答案。当右端点向右延伸时,需要知道它前面第一个比它大/小的数的位置,这里面的最值将发生改变,这个使用单调队列求出,然后将所有的l都加1。注意常数优化。#include#define PB int mid=(a+b)>>1,l=x='0')&&(c='0'... 阅读全文
posted @ 2014-11-15 13:45 Claris 阅读(1060) 评论(2) 推荐(0) 编辑
摘要: 分块预处理出[i,j]块内的答案以及数字出现次数,查询时向两边转移,用树状数组维护,复杂度$O((n+m)\sqrt{n}\log n)$。#include#includeconst int N=50010,K=226;int n,m,l,r,i,j,k,size,block,a[N],b[N],p... 阅读全文
posted @ 2014-11-14 15:36 Claris 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 将坐标离散化后,对于每一个坐标建立一棵动态开节点的线段树,支持查询最大值、和,以及标记下放。#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 阅读(481) 评论(0) 推荐(0) 编辑
摘要: 树形DPf[i][0]表示不向下连边的最大匹配数f[i][1]表示向下连一条边的最大匹配数h[][]表示对应的方案数为了防止爆栈用BFS为了防止MLE:1.数组循环利用,比如存边的数组在存完边后可以用来当dp数组2.BFS时判断哪些点已经走过的bool数组改成bitset3.能不开数组就不开数组,如... 阅读全文
posted @ 2014-11-03 14:13 Claris 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 求出凸包后,矩形的一条边一定与凸包的某条边重合。枚举每条边,求出离它最远的点和离它最左最右的点,因为那三个点是单调变化的,所以复杂度为$O(n)$。注意精度。#include#include#include#define N 50010using namespace std;typedef doub... 阅读全文
posted @ 2014-11-03 07:24 Claris 阅读(415) 评论(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 阅读(269) 评论(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 阅读(671) 评论(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 阅读(305) 评论(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 阅读(474) 评论(0) 推荐(0) 编辑
摘要: RE了几十发,实在没办法了…只好向管理员要数据,然后发现数据规模与题目描述不符…建立Trie并求出DFS序,同时根据DFS序确定字典序然后每次询问相当于询问子树第k小,用主席树维护,注意压缩内存时间复杂度$O(L+n\log w)$,L为所有串长度之和#include#includeconst in... 阅读全文
posted @ 2014-10-17 15:04 Claris 阅读(295) 评论(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 阅读(419) 评论(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 阅读(543) 评论(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 阅读(378) 评论(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 阅读(473) 评论(0) 推荐(0) 编辑
摘要: 如果没有插入操作,那么直接对DFS序建立线段树套平衡树即可,有插入操作的话,将外层的线段树换成重量平衡树即可。一开始写替罪羊树套权值线段树无限MLE…所以只好写替罪羊树套Treap…#include#include#includeusing namespace std;typedef unsigne... 阅读全文
posted @ 2014-09-18 13:30 Claris 阅读(784) 评论(2) 推荐(0) 编辑
摘要: xy方向分开考虑用扫描线处理出拓扑序,第二问直接回答拓扑序,第一问:将操作倒过来,变成加入线段,用线段树维护区间拓扑序的最值#include#include#include#define N 100010using namespace std;inline void read(int&a){char... 阅读全文
posted @ 2014-09-17 17:32 Claris 阅读(297) 评论(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 阅读(423) 评论(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 阅读(506) 评论(3) 推荐(0) 编辑