11 2013 档案
摘要:1 /* 2 线段树 + hash: 3 首先我们可以知道A序列是1~n的排列,那么我们可以先在B序列中把1~n的排列找出来,看其相对位置是否与A相同(hash可做),相同即表明存在一个d满足条件。 4 以此类推,我们接下来可以把B中 2~ n + 1的排列找出来,如果其每位-1后相对顺序还是与A序列一致,即存在d-1也满足。。。 5 线段树中保存一个长度为n的序列的hash。具体看代码 6 */ 7 #include 8 9 using namespace std;10 11 #define lson l, m ,rt> 1;31 if (p =...
阅读全文
摘要:题目:给出一些询问,[l,r]的和为s,问有多少个是错的 1 //并查集 ,,sum[a]表示a与父亲这条路径上的和 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const int maxn = 2e5 + 5;10 int fa[maxn], sum[maxn];11 int n, m, l, r, s;12 int findFa(int x){13 if (x != fa[x]){14 int t = fa[x];15 fa[x] = f...
阅读全文
摘要:题目:给出一个序列,找出一个最长的子序列,相邻的两个数的差在d以内。 1 /* 2 线段树优化dp 3 dp[i]表示前i个数的最长为多少,则dp[i]=max(dp[j]+1) abs(a[i]-a[j]) 8 #include 9 #include 10 #include 11 #include 12 13 using namespace std;14 #define lson l,m,rt> 1;30 if (pos = r){36 return sum[rt];37 }38 int m = (l + r) >> 1;39 int ret...
阅读全文
摘要:1 //离散化 + 扫描线 + 线段树 2 //这个线段树跟平常不太一样的地方在于记录了区间两个信息,len[i]表示颜色为i的被覆盖的长度为len[i], num[i]表示颜色i 『完全』覆盖了该区间几层。len[i]起传递儿子与父亲的关系,而num[i]不起传递作用,只是单纯的表示被覆盖的区间。 3 //然后就是pushUp函数,必须在update到底层后即更新num[]和len,然后把len传上去。 4 //离散化后由于求的是面积,所以我是把每条长度为1的线段当做一个点, 即把左端点表示此段长度。而不是把点当成点。 5 #include 6 #include 7 #i...
阅读全文
摘要:题目:有一个圈,可以从某个位置取球,给出原有的顺序,有三种操作,左旋一次,右旋一次,取球,要求按顺序取球,问需要操作多少次显然操作是确定的,每次将目标球旋转过来,找出左旋和右旋操作少的,然后取球。每次旋转后相对距离不变,每次记录某个区间删掉了多少,就可以查询了。 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 #define lson l, m, rt> 1;17 if (p R) return 0;22 if (L = r){23 return sum[r...
阅读全文

浙公网安备 33010602011771号