随笔分类 - 基础模板
一些思维题和STL用法
摘要:void quicksort(vector<int>& nums,int l,int r){ if(r<=l) return ; int part = randpart(nums,l,r); quicksort(nums,l,part-1); quicksort(nums,part+1,r); re
阅读全文
摘要:void merge(int l,int r){ if(l>=r) return ; int mid=(l+r)>>1; merge(l,mid); merge(mid+1,r); int i=l,j=mid+1,k=0; while(i<=mid&&j<=r){ if(a[i]<=a[j]) b[
阅读全文
摘要:#include <bits/stdc++.h> using namespace std; void adjust(vector<int> &nums, int i, int n){ // i为待调整的节点,n为nums数组元素的个数,从上往下调整 int j = 2 * i + 1; // 左子节
阅读全文
摘要:手动开栈 #pragma comment(linker, “/STACK:1024000000,1024000000”)
阅读全文
摘要:位运算 1. lowbit( ) //1. hash 或者数组预处理# include <bits/stdc++.h>using namespace std;const int MAXN=1<<20;int H[MAXN+1];int lowbit(int n){ return n & -n;}
阅读全文
摘要://求全排列 next_permutation(begin,end)/*next_permutation(start,end),和prev_permutation(start,end)。这两个函数作用是一样的,区别就在于前者求的是当前排列的下一个排列,后一个求的是当前排列的上一个排列。至于这里的“前
阅读全文
摘要:中位数 一、货舱选址 $$min(sum_{i=1}^n |A[i]-k|)$$ $$k=(n+n(mod)2)/2;$$ 注意在求k之前要sort整个数组 二、均分纸牌 $$sum_{i=1}^n |i*\frac{T}{M}-G[i]|==sum_{i=1}^n |S[i]|$$ $$G[i]=
阅读全文
摘要:离散化 离散化就是对应,把太分散的数字通过离散化对应到一个连续的数组上,然后以方便存储 void discreate(){ sort(a+1,a+n+1); for(int i=1;i<=n;i++){ if(i==1||a[i]!=a[i-1]) b[++m]=a[i]; } return ;}i
阅读全文
摘要:逆序对 求任意两个区间之间所形成的逆序对的个数 LL calc(Node x,Node y){ LL l=max(x.l,y.l); if(l>x.r) return 0; LL r=min(x.r,y.r); LL ans=(l-y.l+r-y.l)*(r-l+1)/2%mod; ans=(ans
阅读全文
摘要:ST表 # include <bits/stdc++.h>using namespace std;const int MAXN=1e5+100;int a[MAXN];int f[MAXN][20];int len[MAXN];int n,m;void ST_len(){ for(int i=1;
阅读全文
摘要:priority_queue #include <iostream>#include <queue>using namespace std;//方法1struct tmp1 //运算符重载<{ int x; tmp1(int a) {x = a;} bool operator<(const tmp
阅读全文
摘要:快读 inline LL read(){ LL X=0,w=0; char ch=0; while(!isdigit(ch)) {w|=ch=='-';ch=getchar();} while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar(); re
阅读全文
摘要:差分、前缀和和组合数 1、 所加的如果式组合数的话,可以通过多次前缀和求得,进而用差分解决区间加的问题。 # include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN=1e5+100;const L
阅读全文
摘要:lower_bound( )和upper_bound( ) 都是利用二分查找的方法在一个排好序的数组中进行查找的。 在从小到大的排序数组中, lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存
阅读全文