2022年10月18日
摘要: #include <iostream> #include <cstring> using namespace std ; const int N=60,inf=1<<30; int n,L,a[N],vis[N][N],f[N][N]; int dp(int l,int r){ if(l>=r-1) 阅读全文
posted @ 2022-10-18 15:08 towboat 阅读(14) 评论(0) 推荐(0)
摘要: f[i][j] 在 i 车站,当前经过的时间 j ,所需最小等待时间 f[i][j]= f[i][j+1] +1; //等待 f[i][j]= min{ f[i-1][j+t[j]] } //向右 f[i][j] =min{ f[i+1][j+t[j-1]] } // 向左 #include <io 阅读全文
posted @ 2022-10-18 14:18 towboat 阅读(15) 评论(0) 推荐(0)
  2022年10月17日
摘要: 题目 在序列中找两个不相交的子序列, 子序列满足 max_number - min_number <=k 动态规划,还需要双指针 正反总共扫两遍(f 和 g) 设 f[i] 为[1,i] 满足要求的序列的最大长度 f[i] = max( f[i-1] , i-j+1) #include <iostr 阅读全文
posted @ 2022-10-17 19:08 towboat 阅读(11) 评论(0) 推荐(0)
摘要: luogu 1886 有一个长为 nn 的序列 aa,以及一个大小为 kk 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。 单调队列,顾名思义 假设我们要维护一个单调递增的序列(不一定连续), 当遇到一个数 a[i] , 从 i-1 开始往前剔除元素x( 阅读全文
posted @ 2022-10-17 16:20 towboat 阅读(27) 评论(0) 推荐(0)
摘要: 对序列{a} ,找一个最长的连续子序列 ,其中没有相同的数字 双指针 容易想到 O(n^2) 的算法,枚举i ,再枚举一个j 尝试向后延伸 注意到 j到达终点(无法延伸) 时, 朴素算法此时执行 i++,j=i 但其实不必,当 [i,j] 可行时,[i+1,j] 也是可行的,所以此时j继续增大即可, 阅读全文
posted @ 2022-10-17 14:36 towboat 阅读(24) 评论(0) 推荐(0)
摘要: 对于序列{a} 求其连续子序列{b} 满足 b[i]>=i,有几个? 比如 1 4 6 7 3 , [3],[1,4] [6,7,3]都是合法的 双指针的题 #include <iostream> #include <algorithm> using namespace std; const int 阅读全文
posted @ 2022-10-17 14:27 towboat 阅读(10) 评论(0) 推荐(0)
摘要: 关于二分查找这里记录一下两个函数,即lower_bound(l,r) , upper_bound(l,r) ,分别是求: 1. 大于等于x的第一个位置 2.大于x的第一个位置 //lower_bound() int l_bound(int x,int y,int v){ while(x<y){ in 阅读全文
posted @ 2022-10-17 12:43 towboat 阅读(31) 评论(0) 推荐(0)
  2022年10月15日
摘要: (luogu P1115) 方法1 维护前缀和s[i] ,所求的最大和 为 max{ s[j] - s[i] } , i<j 我们枚举j ,即s[j] 确定,此时只需要 s[i] 最小即可 ,于是维护这个最小值 #include <iostream> using namespace std ; co 阅读全文
posted @ 2022-10-15 17:34 towboat 阅读(16) 评论(0) 推荐(0)
摘要: const int N=1e5+2; int st[N][20],n,a[N]; void init(){ int i,j; for(i=1;i<=n;i++) st[i][0]=a[i]; for(j=1;j<20;j++) for(i=1;i+(1<<j)-1<=n;i++){ st[i][j] 阅读全文
posted @ 2022-10-15 09:01 towboat 阅读(22) 评论(0) 推荐(0)
  2022年10月14日
摘要: 该数据结构可以维护序列的前缀和 1. 单点修改,求区间和 #include <iostream> using namespace std; const int N=5e5+2; int n,tr[N]; int lowbit(int x){ return x&-x; } void add(int x 阅读全文
posted @ 2022-10-14 13:51 towboat 阅读(17) 评论(0) 推荐(0)