classSolution{public:intsumOddLengthSubarrays(vector<int>& arr){intans =0;intendIndex = arr.size() -1;for(inti =0; i <= endIndex; i++) {intleftCount = i;intrightCount = endIndex - i;intleftOdd = (leftCount +1) /2;intrightOdd = (rightCount +1) /2;intleftEven = leftCount...
dfn序:只记录入栈的序列 用dfs序,记录每个点入栈是什么时间 l[u] = ++time,出栈是什么时间r[u] = time 在这个时间之内的就是它的子树 用树状数组维护区间和 如果u 的子树增加了x,在[l[u],r[u]]内的区间和也要增加 x 所以直接把x 增加在 l[u] 位置或者 r[u] 位置就可以了 询问u 子树的权值...
classSolution{public:intgetMissingNumber(vector<int>&nums){if(nums.empty())return0;intl=0,r=nums.size()-1;while(l<r){intmid=l+r>>1;if(nums[mid]!=mid)r=mid;//递增且仅有一个缺失 <==> 对不上号:缺失!elsel=mid+1;}if(nums[r]==r)r++;//特殊情况:当所有数都满足nums[i] ==...
{ return cost>u.cost; } }; vector<edge> g[N]; int dist[N],f[N]; //f[]数组存储到每个节点的单条路径花费 int n,m; void init(){ 66 / 176 for(int i=0;i<=n;i++) dist[i]=f[i]=inf; dist[1]=0; } void dj(){ priority_queue<node> q; q.push(node(1,0)); while(...
import java.util.Vector; public class shuzihuafen { public static void main(String[] args) { for(int w=1;w<=(1<<16)-1;w+=2){//枚举有1出现的数组的所有情况,将其表示成十进制和的形式 Vector<Integer>group1=new Vector<Integer>(); Vector<Integer>group2=new Vector<Integer>(); int k...
...但排列问题需要一个used数组,标记已经选择的元素,如图橘黄色部分所示: 46.全排列 代码如下: vector> result; vector path; void...因为排列问题,每次都要从头开始搜索,例如元素1在[1,2]中已经使用过了,但是在[2,1]中还要再使用一次1。...path.push_back(nums[i]); backtracking(nums, used); path....
vector 数组 随机读改、尾部插入、尾部删除 O(1)头部插入、头部删除 O(n) 无序 可重复 支持随机访问 deque 双端队列 头尾插入、头尾删除 O(1) 无序 可重复 一个中央控制器 + 多个缓冲区,支持首尾快速增删,支持随机访问 forward_list 单向链表 插入、删除 O(1) 无序 可重复 不支持随机访问 list 双向链表...
对所有比较次数求和(等比数列求和,初中问题,我就不写了),极限确实是n,但显然有穷数据是取不到n次的。 8. 关联容器(如map, set, multimap,multiset),删除当前的iterator,只会使当前的iterator失效,只要在erase时,递增当前iterator即可。 对于序列式容器(如vector,deque),删除当前的iterator会使后面所有元素的iterato...
std::vector<int> g[N]; void get_factor(const int &N) { for (int i = 1; i <= N; i ++) for (int j = i; j <= N; j += i) g[j].push_back(i); } 倍数法推论:\(1 \sim n\) 中所有数的正约数个数总和约为 \(n \log n\)。 命题: \[\gcd(a, b) \cdot \mathrm...
map<int, vector<exchangeTo> >tables;bool inPath(int n, int k) { while (k != -1) { if (n == k) return true; k = dp[k].pre; } return false;}int main() { memset(dp, -1, sizeof(dp)); int n, m; cin >> n >> m; for (int i = 0; i < m; i++) { int x,...