摘要:题意:有1到n的数组,每次删除第k小的值,并求和 题解:splay基本操作,删除+合并 坑点:由于不会c++指针操作,sb的只删除了头指针导致一直mle #include<bits/stdc++.h> #include<ext/rope> #define fi first #define se se
阅读全文
摘要:题意:一个值1到n的数组,一种(多次)操作把l到r的区间反转,然后放到数组尾部 题解:裸的splay,用区间合并和区间分割,反转用lazy标记+pushdown就好了 #include<bits/stdc++.h> #include<ext/rope> #define fi first #defin
阅读全文
摘要:归并排序的逆操作,每次二分时把第二段第一位与第一段最后一位开始往前第一个比它大的数交换位置 可以用归并排序验证答案对不对 #include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define p
阅读全文
摘要:用线性筛来筛,复杂度O(n) #include<bits/stdc++.h> #include<ext/rope> #define fi first #define se second #define mp make_pair #define pb push_back #define pii pai
阅读全文
摘要:爆炸场,A被hack两次,a,c都看错题意。。。还是太菜了 A水题,ifelse写的太搓了被hack。。 #include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_b
阅读全文
摘要:想分块想了很久一点思路都没有,结果一看都是写的线段树= = 。。。完全忘记了还有线段树这种操作 题意:给一个数组,一种操作是改变l到r为c,还有一种操作是查询l到r的总和差 线段树记得+lazy标记 #include<bits/stdc++.h> #define fi first #define s
阅读全文
摘要:和上一题差不多,就只查询了次数,不用输出跳出前的最后一位 #include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define pii pair<int
阅读全文
摘要:先对b从小到大sort,判断b是不是比sqrt(n)大,是的话就直接暴力,不是的话就用dp维护一下 dp【i】表示以nb为等差,i为起点的答案,可以节省nb相同的情况 #include<bits/stdc++.h> #define fi first #define se second #define
阅读全文
摘要:分块,在每一块中保存可见的斜率(从左边起点开始递增),对于整个数组,第k个块的最后一个可见块必须比第k+1个块的第一个可见块小 对于分块,复杂度为O(sqrt(n)) #include<bits/stdc++.h> #define fi first #define se second #define
阅读全文
摘要:emm,a出3题,补了两题 A,B水题 #include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define read(a) scanf("%d",&a
阅读全文