menu zcmimi's blog

arrow_back 双指针

建立新数c,使c_i=a_i-b_i

那么就是要找多少对i<jc_i>c_j

c排序,然后双指针统计一下就可以了 ```cpp

include<bits/stdc++.h

zc
2020-04-26 14:01

设当前区间为[l,r]

res=\sum_{i=l}^r p_i\times[\prod_{j=l,j!=i}^r(1-p_j)]

s_{[l,r]}表示$\prod_{i=l}^r

zc
2020-01-21 10:36

A,B总和不相同,显然是-1

由于元素都大于0,可以使用类似双指针的方法

两个指针在A,B数组中移动,若找到A,B中和相同的两端,答案就+1

```cpp

include<cs

zc
2020-01-20 22:35

f_{i,j} =f_{i,k}+1(|a_i-a_k| = |a_k-a_j|)

先对a排序,然后dp,双指针,记得数组开成short

```cpp

include<bits

zc
2019-12-21 19:47

记录S_i表示[1,i]中大于等于T的个数

[L,R]满足要求时,S_R - S_{L-1} \ge k

如果[L,R]满足要求[1...L,R]都满足要求

于是我

zc
2019-12-21 19:47

```cpp

include<bits/stdc++.h>

namespace ZDY{

#pragma GCC optimize(3)
#define il __inline__ 
zc
2019-12-21 19:47

先把血统编号离散化

两个点之前最多只能有k种血统的牛,所以我们考虑使用two\ pointers

O(n)

```cpp

include<bits/stdc++.h>

names

zc
2019-12-21 19:47

首先要知道选定一个区间首先要减去的是最大的连续d区间的和

可以用单调队列维护当前区间最大连续长度为d的子区间和

我们可以发现如果[l,r]合法,那么[l+1...r,r]都合法

zc
2019-12-21 19:47

H:minH , V:minV

  A \times (h-H) + B \times (v-V) \le C

$A \times h + B \times v -C \le A \ti

zc
2019-12-21 19:47

```cpp

include<bits/stdc++.h>

namespace ZDY{

#pragma GCC optimize(3)
#define il __inline__ 
zc
2019-12-21 19:47
1 / 1
Search
search