题解【51nod 1290 Counting Diff Pairs】】的更多相关文章

51nod 1290 Counting Diff Pairs | 莫队 树状数组 题面 一个长度为N的正整数数组A,给出一个数K以及Q个查询,每个查询包含2个数l和r,对于每个查询输出从A[i]到A[j]中,有多少对数,abs(A[i] - A[j]) <= K(abs表示绝对值). 题解 莫队!//其实我就是搜索"51nod + 莫队"找到的这道题-- 七级算法题! 一道320分! 你值得拥有! 题解就是--用个普通的莫队,加上树状数组来统计符合条件的数个数,就好啦. 当增加/…
Description 求区间内有多少对 \((i,j)\) 满足 \(|a_i - a_j| \leq k\) Solution 可以莫队做(万能的莫队) 只需要考虑加入一个数会产生多少贡献即可 离散化的时候把 \(a_i,a_i - k, a_i+k\) 全部放进去. 加入一个数的时候只需要维护 \([a_i - k,a_i+k]\) 有多少个数,并且把 \(a_i\) 这个位置加上 1 删除亦然.这个可以用树状数组方便地维护. 具体实现的时候,因为树状数组是 sum(r) - sum(l-…
一个长度为N的正整数数组A,给出一个数K以及Q个查询,每个查询包含2个数l和r,对于每个查询输出从A[i]到A[j]中,有多少对数,abs(A[i] - A[j]) <= K(abs表示绝对值). Input 第1行:3个数N,K,Q,中间用空格分隔,N为数组A的长度,K为差距,Q为查询的数量.(2 <= N <= 50000, 0 <= K <= 10^9, 1 <= Q <= 50000) 第2至N + 1行:每行1个数,对应数组中的数(1 <= A[i…
前言   [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html   1.题目描述 Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2->3->4, you should return the list as 2->1->4->3. Yo…
problem: Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2->3->4, you should return the list as 2->1->4->3. Your algorithm should use only constant space. You may not modify the values in the…
1.题目描述 2.问题分析 对两个节点进行交换操作 3.代码 ListNode* swapPairs(ListNode* head) { if( !head || head->next == NULL ){ return head; } ListNode dummy(); ListNode* d = &dummy; ListNode* p = head; while( p && p->next != NULL ){ ListNode* tmp = p->next-…
因为不太熟悉链表操作,所以解决方法烦了点,空间时间多有冗余. 代码中l,r分别是每一组的需要交换的左右指针,temp是下一组的头指针,用于交换后链接:res是交换后的l指针,用于本组交换后尾指针在下一组交换后链接上交换后的头指针. /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} *…
这题还挺对胃口的哈哈~是喜欢的画风!回家路上一边听歌一边想到的解法,写出来记录一下…… 首先,由于 \(b_{k} < a_{k + 1}\) ,所以我们可以看作是在一个长度为 n 的序列上选择出 k 个不相交的区间使得这 k个区间的长度各不相同.那么我们可以先求出 \(f[i][j]\) 表示选择了 \(i\) 个区间,这 \(i\) 个区间的区间长度总和为 \(j\) 的方案数.然后,我们考虑用这些方案数与序列剩下的长度的划分的方案数共同构成答案.所以我们再求一个 \(g[i][j]\) 表…
题目传送门 题目大意 给出 \(n\),第 \(i\) 个数有 \(i\) 个,问凑出 \(n\) 的方案数. \(n\le 10^5\) 思路 呜呜呜,傻掉了... 首先想到根号分治,分别考虑 \([1,\sqrt n]\) 以及 \([\sqrt n+1,n]\). \([1,\sqrt n]\) 不难看出这部分可以直接 dp,设 \(f_{i,j}\) 为前面 \(i\) 种物品选出重量为 \(j\) 的方案数,可以得到转移式: \[f_{i,j}=f_{i-1,j}+f_{i,j-i}-…
https://vjudge.net/problem/CodeChef-TAPAIR 合法的删除方法: 第一种:桥边与其余任意边(1)桥*(桥-1)/2(两条桥边)(2)桥*(m-桥)(桥边+其他边)第二种:两条非桥边:一定在同一个边双内对每一个边双求dfs树(1)两条树边(定义覆盖:反向边(a,b)覆盖了dfs树上a到b路径中每一条边)显然,任意边覆盖的路径中都是深度递减/递增的一些点如果两条树边被完全相同的边集覆盖,那么显然(感性理解)它们处在相同的环的中,因此同时去掉能让这些环断开两个口子…