分块

6277. 数列分块入门 1

分块思想

我们把每m个元素分成一块,所以我们总共的块数就是n/mn / mn/m块,一般情况下我们取m=nm = \sqrt{n}m=n​.对于区间加操作,我们可以先暴力左右两边,然后对于中间的整块的部分的加减,我们累加在块的标记上,然后我们每次查询的时候只要,每个元素的值加上这个块的标记值,就可以得到我们的答案了。

复杂度分析

每次操作我们修改的最多的元素最多就是O(n)O(\sqrt {n})O(n​)级别的个数,时间复杂读也就是O(n)O(\sqrt n)O(n​)级别的,查询的时间复杂度是O(1)O(1)O(1)的,最多有nnn个操作,整体上是O(nn)O(n \sqrt{n})O(nn​)的,于是一个暴力而优美的分块算法就出现了,简单的思想,\sqrt { }​级别的优化。

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define endl '\n'using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-')    f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}void print(ll x) {if(x < 10) {putchar(x + 48);return ;}print(x / 10);putchar(x % 10 + 48);
}const int N = 5e4 + 10;int value[N], bl[N], tag[N], block, n;void add(int l, int r, int c) {for(int i = l; i <= bl[l] * block && i <= r; i++) {//对前面的部分进行暴力修改。value[i] += c;}if(bl[l] != bl[r]) {//如果这两个块不在同一个分块中才要进行后面的暴力修改,否则将会重复累加。for(int i = block * (bl[r] - 1) + 1; i <= r; i++) {value[i] += c;}}for(int i = bl[l] + 1; i <= bl[r] - 1; i++) {//对每个块进行区间修改。tag[i] += c;}//严格来说每次修改的复杂度最多将会是3 * sqrt(n)
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);n = read(); block = sqrt(n);//block是分块的大小for(int i = 1; i <= n; i++) {value[i] = read();bl[i] = (i - 1) / block + 1;//每个位置在分块中的位置。}for(int i = 1; i <= n; i++) {int op = read(), l = read(), r = read(), c = read();if(!op) {add(l, r, c);}else {printf("%d\n", value[r] + tag[bl[r]]);//他当前的值加上分块的累加值。}}return 0;
}

6278. 数列分块入门 2

想法

查询操作:对于每一个块我们开一个数组来维护其有序的状态,所以对于每一个整块我们可以通过二分去得到我们的答案,对于两头的块,我们可以暴力去得到满足条件的数。

修改操作:同样的对于整块的我们还是在一个区间标记加上其修改值,对于两头的操作我们需要额外单独的操作,记得操作完之后要把原来的存区间有序的数组重新排序,得到一个新的区间有序数组。

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define endl '\n'using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}void print(ll x) {if(x < 10) {putchar(x + 48);return ;}print(x / 10);putchar(x % 10 + 48);
}const int N = 5e4 + 10;int value[N], bl[N], tag[N], n, block, m;vector<int> elem[N];void reset(int x) {//最好还是写一个函数,一开始我就是没写函数然后wa了一次。elem[x].clear();for(int i = (x - 1) * block + 1; i <= x * block && i <= n; i++)elem[x].pb(value[i]);sort(elem[x].begin(), elem[x].end());
}void add(int l, int r, int x) {for(int i = l; i <= r && i <= bl[l] * block; i++)value[i] += x;reset(bl[l]);if(bl[l] != bl[r]) {for(int i = (bl[r] - 1) * block + 1; i <= r; i++)value[i] += x;reset(bl[r]);}for(int i = bl[l] + 1; i <= bl[r] - 1; i++)tag[i] += x;
}int query(int l, int r, int x) {int sum = 0;for(int i = l; i <= r && i <= bl[l] * block; i++)if(value[i] + tag[bl[i]] < x)sum++;if(bl[l] != bl[r])for(int i = (bl[r] - 1) * block + 1; i <= r; i++)if(value[i] + tag[bl[i]] < x)sum++;for(int i = bl[l] + 1; i <= bl[r] - 1; i++) {sum += lower_bound(elem[i].begin(), elem[i].end(), x - tag[i]) - elem[i].begin();}return sum;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);n = read(); block = sqrt(n);for(int i = 1; i <= n; i++) {value[i] = read();bl[i] = (i + block - 1) / block;elem[bl[i]].pb(value[i]);}m = bl[n];for(int i = 1; i <= m; i++) sort(elem[i].begin(), elem[i].end());for(int i = 1; i <= n; i++) {int op = read(), l = read(), r = read(), c = read();if(op & 1) {printf("%d\n", query(l, r, c * c));}else {add(l, r, c);}}return 0;
}

6279. 数列分块入门 3

想法

这题应该是跟上一个类似,就是queryqueryquery操作稍微变化一下。

用上面的代码修改的时候要注意,这题数据变大了,需要改成1e5+101e5 + 101e5+10,不然就跟我一样入坑了。

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define endl '\n'using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}void print(ll x) {if(x < 10) {putchar(x + 48);return ;}print(x / 10);putchar(x % 10 + 48);
}const int N = 1e5 + 10;int value[N], bl[N], tag[N], n, block, m;vector<int> elem[N];void reset(int x) {elem[x].clear();for(int i = (x - 1) * block + 1; i <= x * block && i <= n; i++)elem[x].pb(value[i]);sort(elem[x].begin(), elem[x].end());
}void add(int l, int r, int x) {for(int i = l; i <= r && i <= bl[l] * block; i++)value[i] += x;reset(bl[l]);if(bl[l] != bl[r]) {for(int i = (bl[r] - 1) * block + 1; i <= r; i++)value[i] += x;reset(bl[r]);}for(int i = bl[l] + 1; i <= bl[r] - 1; i++)tag[i] += x;
}ll query(int l, int r, int x) {ll ans = -1e10;for(int i = l; i <= r && i <= bl[l] * block; i++)if(value[i] + tag[bl[i]] < x && value[i] + tag[bl[i]] > ans)ans = value[i] + tag[bl[i]];if(bl[l] != bl[r])for(int i = (bl[r] - 1) * block + 1; i <= r; i++)if(value[i] + tag[bl[i]] < x && value[i] + tag[bl[i]] > ans)ans = value[i] + tag[bl[i]];for(int i = bl[l] + 1; i <= bl[r] - 1; i++) {auto p = lower_bound(elem[i].begin(), elem[i].end(), x - tag[i]);if(p == elem[i].begin()) continue;p--;ans = max(ans, 1ll * (*p + tag[i]));}return ans == -1e10 ? -1 : ans;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);n = read(); block = sqrt(n);for(int i = 1; i <= n; i++) {value[i] = read();bl[i] = (i + block - 1) / block;elem[bl[i]].pb(value[i]);}m = bl[n];for(int i = 1; i <= m; i++) sort(elem[i].begin(), elem[i].end());for(int i = 1; i <= n; i++) {int op = read(), l = read(), r = read(), c = read();if(op & 1) {printf("%d\n", query(l, r, c));}else {add(l, r, c);}}return 0;
}

6280. 数列分块入门 4

想法

仿照题二,我们可以再引入一个数组来代表当前块的总和,之后的操作就变得简单了。

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define endl '\n'using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}void print(ll x) {if(x < 10) {putchar(x + 48);return ;}print(x / 10);putchar(x % 10 + 48);
}const int N = 1e5 + 10;ll a[N], sum[N], tag[N];int n, block, bl[N];void update(int l, int r, int x) {for(int i = l; i <= bl[l] * block && i <= r; i++) {a[i] += x;sum[bl[i]] += x;}if(bl[l] != bl[r]) {for(int i = (bl[r] - 1) * block + 1; i <= r; i++) {a[i] += x;sum[bl[i]] += x;}}for(int i = bl[l] + 1; i <= bl[r] - 1; i++)tag[i] += x;
}int query(int l, int r, int mod) {ll ans = 0;for(int i = l; i <= bl[l] * block && i <= r; i++) {ans = (ans + a[i] + tag[bl[i]]) % mod;}if(bl[l] != bl[r]) {for(int i = (bl[r] - 1) * block + 1; i <= r; i++) {ans = (ans + a[i] + tag[bl[i]]) % mod;}}for(int i = bl[l] + 1; i <= bl[r] - 1; i++) {ans = (ans + sum[i] + tag[i] * block) % mod;}return ans;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);n = read(); block = sqrt(n);for(int i = 1; i <= n; i++) {a[i] = read();bl[i] = (i + block - 1) / block;sum[bl[i]] += a[i];}for(int i = 1; i <= n; i++) {int op = read(), l = read(), r = read(), c = read();if(op & 1) {printf("%d\n", query(l, r, c + 1));}else {update(l, r, c);}}return 0;
}

6281. 数列分块入门 5

想法

一开始看到这个题目感觉分块无从下手啊,区间开方操作,结果一看他们ac代码,原来是开根号,,,

既然是开根号那就简单了,学过线段树应该写过这类题,我们只要加一个区间tag来标记区间内所有的数是否全部变成0和1即可。然后再加一个区间和,对于tag标记为,区间所有的数都是0 和1的我们可以直接查询区间和,也可以跳过他的开方显然有1=1\sqrt {1} = 11​=1, 0=0\sqrt {0} = 00​=0

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define endl '\n'using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}void print(ll x) {if(x < 10) {putchar(x + 48);return ;}print(x / 10);putchar(x % 10 + 48);
}const int N = 1e5 + 10;int a[N], sum[N], tag[N];int n, block, bl[N];void update(int l, int r) {for(int i = l; i <= r && i <= bl[l] * block; i++) {if(a[i] == 0 || a[i] == 1) continue;sum[bl[i]] -= a[i];a[i] = sqrt(a[i]);sum[bl[i]] += a[i];if(a[i] == 1 || a[i] == 0) tag[bl[i]]++;}if(bl[l] != bl[r]) {for(int i = (bl[r] - 1) * block + 1; i <= r; i++) {if(a[i] == 0 || a[i] == 1) continue;sum[bl[i]] -= a[i];a[i] = sqrt(a[i]);sum[bl[i]] += a[i];if(a[i] == 1 || a[i] == 0) tag[bl[i]]++;}}for(int i = bl[l] + 1; i <= bl[r] - 1; i++) {if(tag[i] == block) continue;else {for(int j = (i - 1) * block + 1; j <= i * block; j++) {if(a[j] == 0 || a[j] == 1) continue;sum[bl[j]] -= a[j];a[j] = sqrt(a[j]);sum[bl[j]] += a[j];if(a[i] == 1 || a[i] == 0) tag[bl[i]]++;}}}
}int query(int l, int r) {int ans = 0;for(int i = l; i <= r && i <= bl[l] * block; i++)ans += a[i];if(bl[l] != bl[r]) {for(int i = (bl[r] - 1) * block + 1; i <= r; i++)ans += a[i];}for(int i = bl[l] + 1; i <= bl[r] - 1; i++) {if(tag[i] == block) ans += sum[i];else {for(int j = (i - 1) * block + 1; j <= i * block; j++)ans += a[j];}}return ans;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);n = read(); block = sqrt(n);for(int i = 1; i <= n; i++) {a[i] = read();bl[i] = (i + block - 1) / block;sum[bl[i]] += a[i];if(a[i] == 0 || a[i] == 1) tag[bl[i]]++;}for(int i = 1; i <= n; i++) {int op = read(), l = read(), r = read(), c = read();if(op & 1) {printf("%d\n", query(l, r));}else {update(l, r);}}return 0;
}

6282. 数列分块入门 6

想法

这里引入了一个暴力的rebuildrebuildrebuild,不愧是分块,依旧是如此的暴力。

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define endl '\n'using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}void print(ll x) {if(x < 10) {putchar(x + 48);return ;}print(x / 10);putchar(x % 10 + 48);
}const int N = 2e5 + 10;int value[N], n, m, block;vector<int> a[N];pii query(int x) {int now = 1;while(x > a[now].size()) {x -= a[now].size(), now++;}return mp(now, x - 1);
}void rebuild() {int num = 0;for(int i = 1; i <= m; i++) {for(int j = 0; j < a[i].size(); j++) {value[++num] = a[i][j];}a[i].clear();//注意一定要clear,我就在这里找bug找了半小时。}block = sqrt(num), m = (num + block - 1) / block;for(int i = 1; i <= num; i++) {a[(i + block - 1) / block].pb(value[i]);}
}void insert(int pos, int value) {pii p = query(pos);a[p.first].insert(a[p.first].begin() + p.second, value);if(a[p.first].size() > 20 * block)rebuild();
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);n = read();block = sqrt(n), m = (n + block - 1) / block;for(int i = 1; i <= n; i++) {value[i] = read();a[(i + block - 1) / block].pb(value[i]);}for(int i = 1; i <= n; i++) {int op = read(), l = read(), r = read(), c = read();if(op & 1) {pii ans = query(r);printf("%d\n", a[ans.first][ans.second]);}else {insert(l, r);}}return 0;
}

6283. 数列分块入门 7

想法

暴力两头,区间操作中间。

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define endl '\n'using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}void print(ll x) {if(x < 10) {putchar(x + 48);return ;}print(x / 10);putchar(x % 10 + 48);
}const int N = 1e5 + 10, mod = 1e4 + 7;int a[N], add[N], mult[N], bl[N], n, block;void init(int bl) {for(int i = (bl - 1) * block + 1; i <= bl * block; i++) {a[i] = (a[i] * mult[bl]) % mod;a[i] = (a[i] + add[bl]) % mod;}mult[bl] = 1, add[bl] = 0;
}void Add(int l, int r, int x) {init(bl[l]);for(int i = l; i <= r && i <= bl[l] * block; i++)a[i] = (a[i] + x) % mod;if(bl[l] != bl[r]) {init(bl[r]);for(int i = (bl[r] - 1) * block + 1; i <= r; i++)a[i] = (a[i] + x) % mod;}for(int i = bl[l] + 1; i <= bl[r] - 1; i++)add[i] = (add[i] + x) % mod;
}void Mult(int l, int r, int x) {init(bl[l]);for(int i = l; i <= r && i <= bl[l] * block; i++)a[i] = (a[i] * x) % mod;if(bl[l] != bl[r]) {init(bl[r]);for(int i = (bl[r] - 1) * block + 1; i <= r; i++)a[i] = (a[i] * x) % mod;}for(int i = bl[l] + 1; i <= bl[r] - 1; i++)mult[i] = (mult[i] * x) % mod, add[i] = (add[i] * x) % mod;
}int query(int pos) {return (((a[pos] * mult[bl[pos]])) % mod + add[bl[pos]]) % mod;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);n = read();block = sqrt(n);for(int i = 1; i <= n; i++) {a[i] = read() % mod;bl[i] = (i + block - 1) / block;mult[i] = 1;}for(int i = 1; i <= n; i++) {int op = read(), l = read(), r = read(), x = read();if(!op) {Add(l, r, x);} else if(op & 1) {Mult(l, r, x);} else {printf("%d\n", query(r));}}return 0;
}

数列分块入门 (1 ~ 7)相关推荐

  1. #6279. 数列分块入门 3(区间修改,查询权值前驱)

    #6279. 数列分块入门 3 这是使用hzwer建议的set写的分块代码,set自动排序,支持二分查找,但是常数较大,比我下面写的用vector实现的分块慢了三倍,空间大了10倍. #include ...

  2. LOJ 数列分块入门6

    LOJ 数列分块入门6 题目: 题目 题解: 我都不懂这题为什么要用分块... ... 直接vector就好了... 但是如果有区间修改的话就不行了.所以这题是启示我们也可以动态分块.具体就是每次插入 ...

  3. LOJ #6280. 数列分块入门 4-分块(区间加法、区间求和)

    #6280. 数列分块入门 4 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 题目描述 给出一个长为 ...

  4. 数列分块入门(套题)(loj6277,loj6278,loj6279,loj6280,loj6281,loj6282,loj6283,loj6284,loj6285)

    前言 zjoi考差了,码一些分块题缓解一下心情 壹 数列分块入门 1[loj6277] 题目大意:区间加,单点查 直接分块,区间加时完全覆盖的块打tag,边界块暴力重构 块大小设为n\sqrt nn​ ...

  5. 「分块」数列分块入门1 – 9

    ACM模板 放暑假了,回归!!! 自己不会写暴力,而且好久没写代码了,于是学学分块的优雅暴力~ 「分块入门-LibreOJ」 「分块」数列分块入门1 – 9 by hzwer 数列简单分块问题实际上有 ...

  6. 「分块系列」数列分块入门3 解题报告

    数列分块入门3 题意概括 区间加法,区间求前驱. 写在前面 这题的方法与分块2方法极其类似,建议自行解决. 正题 和上一题类似,但是二分不是用来计数的,而是用来求小于c的最大值的.然后对于不完整快,将 ...

  7. #6277. 数列分块入门 1

    题目链接:https://loj.ac/problem/6277 学习博客:http://hzwer.com/8053.html #6277. 数列分块入门 1 内存限制:256 MiB时间限制:10 ...

  8. #6279. 数列分块入门 3

    数列分块入门 3 #include<bits/stdc++.h> using namespace std; #define ll long long const int N=1000010 ...

  9. LOJ #6279. 数列分块入门 3-分块(区间加法、查询区间内小于某个值x的前驱(比其小的最大元素))...

    #6279. 数列分块入门 3 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 3 题目描述 给出一 ...

最新文章

  1. 第十六届全国大学生智能车讯飞智慧餐厅智能车竞赛比赛成绩
  2. 让你的系统“坚挺不倒”的最后一个大招——「降级」
  3. Jakarta Commons Logging学习笔记
  4. Hive将查询结果保存到另一张表中
  5. 保护SQL Server数据库的十大绝招
  6. iar 堆栈设置_IAR MSP430设置合理堆栈大小(the stack pointer for stack is outside the stack range)...
  7. java wed登录面 代码_JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)...
  8. c3p0配置 initialPoolSize 和minPoolSize 可以设为0吗?设0有坏处吗?
  9. android java 调用栈_Android开发中打印方法调用栈
  10. 1.10 长短期记忆(LSTM)
  11. 如果战斗机飞行员弹出,自动驾驶仪会接管飞机安全降落么?
  12. 剑指offer——6.从尾到头打印链表
  13. H5页面--Android滑动屏幕图片误触
  14. 计算机应用课程的考核情况,《计算机应用技术》课程kpi考核说明..doc
  15. css3的clip-path方法剪裁实现(三角形,多边形,圆,椭圆)
  16. vc2010, fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt解决办法
  17. 马尔科夫决策过程(MDP) : BlackJack (MC-Off Policy)
  18. linux 查看tomcat日志 关键字
  19. 打印机手动打印双面的防止顺序
  20. HLSL 的基础知识

热门文章

  1. python路径怎么找windows_如何查看 windows 中 Python安装路径
  2. 增强型的for循环linkedlist_LinkedList的复习
  3. js 月份加6个月_美国切削工具6月份订单较上月增加10.1
  4. 视觉开发需要什么程度的数学_角度的概念在视觉上非常直观,但其数学定义并不是那么简单...
  5. androidstudio学习总结_Android 开发工程师自述:2年的开发,我总结了7条经验
  6. 因子分析最少要有几个因子_Re0:魔女司教和魔女是什么关系?他们的魔女因子是魔女给的吗...
  7. 密西根州立大学计算机qs分数,2020年QS世界大学排名密歇根州立大学排名第144
  8. java抓取新闻_【图片】【抓取】Java获取各大网站新闻【java吧】_百度贴吧
  9. linux 取消证书登录密码,SUSELinux 中为 SSH 访问设置不输入密码的证书认证登录方式...
  10. python用pandas提取行列_python- pandas 不删除符合条件的行和列