![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
acwing 基础课
文章平均质量分 51
记录acwing基础课的内容,整理
Chemin Du Retour
这个作者很懒,什么都没留下…
展开
-
AcWing 788. 逆序对的数量
题目给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。输入格式第一行包含整数n,表示数列的长度。第二行包含 n 个整数,表示整个数列。输出格式输出一个整数,表示逆序对的个数。数据范围1 <= n <= 100000输入样例:62 3 4 5 6 1输出样例:5题解利用归并排序的时候,两段区间已经分别排好序,原创 2020-11-14 16:16:12 · 326 阅读 · 1 评论 -
Acwing.802. 区间和
题目假定有一个无限长的数轴,数轴上每个坐标上的数都是0。现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。接下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。输入格式第一行包含两个整数n和m。接下来 n 行,每行包含两个整数x和c。再接下里 m 行,每行包含两个整数l和r。输出格式共m行,每行输出一个询问中所求的区间内数字和。数据范围−1e9≤x≤1e9,1≤n,m≤1e5,−1e9≤l≤r≤1e9,−10000≤c≤原创 2020-11-14 15:33:17 · 180 阅读 · 0 评论 -
动态规划(一)背包
背包问题1.01背包每种物品一个for(int i=0;i<n;i++){ cin >> v[i] >> w[i]; } for(int i=0;i<n;i++){ for(int j=V;j>=v[i];j--){ dp[j] = max(dp[j],dp[j-v[i]]+w[i]); } } cout << dp[V] << endl;2.完全背包问题,每种物品无限(优化) for(int i=0;i&原创 2020-09-17 22:58:03 · 150 阅读 · 1 评论 -
数论(1)
1.约数个数 cin >> x; unordered_map<int,int>primes; for(int i=2;i*i<=x;i++){ while(x%i == 0){ x/=i; primes[i]++; } } if(x > 1)primes[x]++; ll ans = 0; for(auto p : primes)ans = ans * (p.second + 1)% mod; cout << ans &l原创 2020-09-04 17:01:58 · 689 阅读 · 0 评论 -
第二章.数据结构(三)
知识点 : 哈希表,STL的使用1.哈希表把一个很大的区间的数映射到一个小区间的数例如 : 实现一个很大区间的数的插入和查询.用桶排序显然不行1.拉链法h(11) = 2,h(23) = 2,那么把11 和 23 放 2 的链上,找的时候遍历一遍.//N 取比数据范围大的一个素数//哈希函数 int h[N],e[N],ne[N],idx;void insert(int x){ int k = (x % MOD + MOD)% MOD; e[idx] = x; ne[idx.原创 2020-08-31 01:18:38 · 134 阅读 · 0 评论 -
第二章.数据结构(二)
知识点 : Trie树 ,并查集,堆的操作Trie树高效地储存和查找字符串集合的数据结构const int N = 100010;int son[N][26],cnt[N],idx;//插入 void insert(char str[]){ int p = 0; for(int i=0;str[i];i++){ int u = str[i] - 'a'; if(!son[p][u])son[p][u] = ++idx; p = son[p][u]; } cnt[p]+..原创 2020-08-29 23:06:29 · 83 阅读 · 0 评论 -
第二章.数据结构(一)
知识点 : 链表与邻接表 . 栈与队列 . kmp链表1.单链表*****//head[]表示链表头,e[]表示节点,ne[]表示next指针,idx表示当前点 int head,e[N],ne[N],idx;void init(){ head = -1; idx = 0;}//在头节点插入一个数 void insert(int a){ e[idx] = a;ne[idx] = head;head = idx++;}//删除头节点 void remove(){ he.原创 2020-08-29 15:15:17 · 109 阅读 · 0 评论