• 终于 rank < 10 了

题目

洛谷 RemoteJudge

  • A
  • B
  • C
  • D
  • E
  • F

Codeforces

  • A
  • B
  • C
  • D
  • E
  • F

A

题意

  • 一个长度为 nnn 的数字串 sss
  • 求 sss 有多少个子串,满足子串内的数字顺次连接后得到的数是偶数
  • 1≤n≤650001\le n\le 650001≤n≤65000 且 sss 不包含 000

题解

  • ∑i=1ni[s[i]是偶数]\sum_{i=1}^ni[s[i]是偶数]i=1∑n​i[s[i]是偶数]

代码

#include <bits/stdc++.h>// 20030830inline int read()
{int res = 0; bool bo = 0; char c;while (((c = getchar()) < '0' || c > '9') && c != '-');if (c == '-') bo = 1; else res = c - 48;while ((c = getchar()) >= '0' && c <= '9')res = (res << 3) + (res << 1) + (c - 48);return bo ? ~res + 1 : res;
}typedef long long ll;const int N = 1e5 + 5;int n;
char s[N];
ll ans;int main()
{n = read();scanf("%s", s + 1);for (int i = 1; i <= n; i++)if (s[i] - '0' + 1 & 1) ans += i;std::cout << ans << std::endl;return 0;
}

B

题意

  • 一个长度为 nnn 的正整数数组 aaa
  • 求一个长度为 nnn 的非负数组 xxx ,满足
  • (1)对于所有的 1≤i≤n1\le i\le n1≤i≤n ,有 0≤xi≤ai0\le x_i\le a_i0≤xi​≤ai​
  • (2)对于所有的 1≤j&lt;i≤n1\le j&lt;i\le n1≤j<i≤n ,有 xj=0x_j=0xj​=0 或 xj&lt;xix_j&lt;x_ixj​<xi​
  • (3)最大化 ∑i=1nxi\sum_{i=1}^nx_i∑i=1n​xi​
  • 求这个最大值
  • 1≤n≤2×1051\le n\le 2\times10^51≤n≤2×105 , 1≤ai≤1091\le a_i\le 10^91≤ai​≤109

题解

  • 从右到左考虑,显然每个 xix_ixi​ 需要取到它能取到的最大值
  • 也就是说
  • (1) xn=anx_n=a_nxn​=an​
  • (2) xi=min⁡(ai,max⁡(0,xi+1−1))x_i=\min(a_i,\max(0,x_{i+1}-1))xi​=min(ai​,max(0,xi+1​−1)) , 1≤i&lt;n1\le i&lt;n1≤i<n

代码

#include <bits/stdc++.h>// 20030830inline int read()
{int res = 0; bool bo = 0; char c;while (((c = getchar()) < '0' || c > '9') && c != '-');if (c == '-') bo = 1; else res = c - 48;while ((c = getchar()) >= '0' && c <= '9')res = (res << 3) + (res << 1) + (c - 48);return bo ? ~res + 1 : res;
}template <class T>
inline T Min(const T &a, const T &b) {return a < b ? a : b;}typedef long long ll;const int N = 2e5 + 5;int n, a[N], wt;
ll ans;int main()
{n = read();for (int i = 1; i <= n; i++) a[i] = read(); wt = a[n] + 1;for (int i = n; i >= 1; i--){wt--; if (wt < 0) wt = 0;wt = Min(wt, a[i]);ans += wt;}std::cout << ans << std::endl;return 0;
}

C

题意

  • 一棵 nnn 个节点的树,边有红边和黑边
  • 求有多少个节点序列 a1…ka_{1\dots k}a1…k​
  • 满足 a1a_1a1​ 到 a2a_2a2​ , a2a_2a2​ 到 a3a_3a3​ , …\dots… , ak−1a_{k-1}ak−1​ 到 aka_kak​ 这 k−1k-1k−1 条路径中存在一条经过了至少一条黑边
  • 2≤n≤1052\le n\le10^52≤n≤105 , 2≤k≤1002\le k\le1002≤k≤100

题解

  • 容易想到一个经典的 O(nk) 树形 DP
  • 用总方案数 nkn^knk 减掉不经过黑边的方案数
  • 显然,如果只加入所有红边,那么不经过黑边的方案数,就是节点序列 a1…ka_{1\dots k}a1…k​ 中所有点位于同一个连通块内的方案数
  • 用并查集维护连通块大小
  • 答案就是 nkn^knk 减去所有连通块的大小的 kkk 次幂之和

代码

#include <bits/stdc++.h>// 20030830inline int read()
{int res = 0; bool bo = 0; char c;while (((c = getchar()) < '0' || c > '9') && c != '-');if (c == '-') bo = 1; else res = c - 48;while ((c = getchar()) >= '0' && c <= '9')res = (res << 3) + (res << 1) + (c - 48);return bo ? ~res + 1 : res;
}const int N = 1e5 + 5, ZZQ = 1e9 + 7;int qpow(int a, int b)
{int res = 1;while (b){if (b & 1) res = 1ll * res * a % ZZQ;a = 1ll * a * a % ZZQ;b >>= 1;}return res;
}int n, k, fa[N], sze[N], ans;int cx(int x)
{if (fa[x] != x) fa[x] = cx(fa[x]);return fa[x];
}void zm(int x, int y)
{int ix = cx(x), iy = cx(y);if (ix != iy) fa[iy] = ix, sze[ix] += sze[iy];
}int main()
{int x, y, z;n = read(); k = read();for (int i = 1; i <= n; i++) fa[i] = i, sze[i] = 1;for (int i = 1; i < n; i++){x = read(); y = read(); z = read();if (!z) zm(x, y);}for (int i = 1; i <= n; i++)if (fa[i] == i) ans = (qpow(sze[i], k) + ans) % ZZQ;std::cout << (qpow(n, k) - ans + ZZQ) % ZZQ << std::endl;return 0;
}

D

题意

  • 给定正整数 mmm ,你有一个空集合 aaa
  • 每次你可以等概率随机一个 [1,m][1,m][1,m] 内的正整数加入集合 aaa
  • 加入之后,如果集合 aaa 内所有数的 gcd⁡\gcdgcd 为 111 则结束过程,否则继续随机
  • 求过程结束后集合 aaa 的期望大小
  • 1≤m≤1000001\le m\le 1000001≤m≤100000

算法:莫比乌斯反演 + 期望 DP

  • 状态 f[i]f[i]f[i] 表示当前集合 aaa 的 gcd⁡\gcdgcd 为 iii 的情况下,期望加入多少个数之后这个 gcd⁡\gcdgcd 变成 111
  • 显然有
  • f[1]=0f[1]=0f[1]=0
  • f[i]=1+1m∑j=1mf[gcd⁡(i,j)]f[i]=1+\frac 1m\sum_{j=1}^mf[\gcd(i,j)]f[i]=1+m1​j=1∑m​f[gcd(i,j)]
  • 发现 gcd⁡(i,j)\gcd(i,j)gcd(i,j) 的取值个数只有 iii 的约数个数,所以把枚举 jjj 改成枚举 gcd⁡(i,j)\gcd(i,j)gcd(i,j)
  • f[i]+1+1m∑d∣if[d]×cnt(d,i)f[i]+1+\frac 1m\sum_{d|i}f[d]\times cnt(d,i)f[i]+1+m1​d∣i∑​f[d]×cnt(d,i)
  • cnt(d,i)cnt(d,i)cnt(d,i) 表示 [1,m][1,m][1,m] 内有多少个数与 iii 的 gcd⁡\gcdgcd 等于 ddd
  • 另设 g(i,j)g(i,j)g(i,j) 表示 [1,i][1,i][1,i] 内有多少个数与 jjj 互质
  • 显然有 cnt(d,i)=g(⌊md⌋,id)cnt(d,i)=g(\lfloor\frac md\rfloor,\frac id)cnt(d,i)=g(⌊dm​⌋,di​)
  • 注意到 ∑i=1mmi=O(mlog⁡m)\sum_{i=1}^m\frac mi=O(m\log m)∑i=1m​im​=O(mlogm)
  • 所以考虑求出所有的 ij≤mij\le mij≤m ,对应 g(⌊mi⌋,j)g(\lfloor\frac mi\rfloor,j)g(⌊im​⌋,j) 的值
  • 那么对于给定的 a≥ba\ge ba≥b ,如何求有多少个 1≤i≤a1\le i\le a1≤i≤a 满足 gcd⁡(i,b)=1\gcd(i,b)=1gcd(i,b)=1 呢?
  • 如果不是满足 gcd⁡(i,b)=1\gcd(i,b)=1gcd(i,b)=1 而是满足 x∣gcd⁡(i,b)x|\gcd(i,b)x∣gcd(i,b) ,则这显然为 ⌊ax⌋\lfloor\frac ax\rfloor⌊xa​⌋
  • 所以,考虑反演,得
  • g(a,b)=∑x∣bμ(x)⌊ax⌋g(a,b)=\sum_{x|b}\mu(x)\lfloor\frac ax\rfloorg(a,b)=x∣b∑​μ(x)⌊xa​⌋
  • 线性筛 μ\muμ 之后就可以在 O(b的约数个数)O(b的约数个数)O(b的约数个数) 的时间内求出
  • 设 D(x)D(x)D(x) 为 xxx 的约数个数,那么对每对 ij≤mij\le mij≤m 进行计算的总复杂度为
  • ∑i=1m∑j=1⌊mi⌋D(j)=∑i=1m∑j=1⌊mi⌋⌊⌊mi⌋j⌋=∑i=1m⌊mi⌋log⁡m=O(mlog⁡2m)\sum_{i=1}^m\sum_{j=1}^{\lfloor\frac mi\rfloor}D(j)=\sum_{i=1}^m\sum_{j=1}^{\lfloor\frac mi\rfloor}\lfloor\frac{\lfloor\frac mi\rfloor}j\rfloor=\sum_{i=1}^m\lfloor\frac mi\rfloor\log m=O(m\log^2m)i=1∑m​j=1∑⌊im​⌋​D(j)=i=1∑m​j=1∑⌊im​⌋​⌊j⌊im​⌋​⌋=i=1∑m​⌊im​⌋logm=O(mlog2m)
  • 回到这个转移
  • f[i]+1+1m∑d∣if[d]×cnt(d,i)f[i]+1+\frac 1m\sum_{d|i}f[d]\times cnt(d,i)f[i]+1+m1​d∣i∑​f[d]×cnt(d,i)
  • 发现 ddd 可以等于 iii ,得不到转移的目的,所以做一些移项
  • (1−cnt(i,i)m)f[i]=1+1m∑d∣i,d≠if[d]×cnt(d,i)(1-\frac{cnt(i,i)}m)f[i]=1+\frac1m\sum_{d|i,d\ne i}f[d]\times cnt(d,i)(1−mcnt(i,i)​)f[i]=1+m1​d∣i,d̸​=i∑​f[d]×cnt(d,i)
  • f[i]=11−cnt(i,i)m(1+1m∑d∣i,d≠if[d]×cnt(d,i))f[i]=\frac1{1-\frac{cnt(i,i)}m}(1+\frac1m\sum_{d|i,d\ne i}f[d]\times cnt(d,i))f[i]=1−mcnt(i,i)​1​(1+m1​d∣i,d̸​=i∑​f[d]×cnt(d,i))
  • 于是我们就可以转移了
  • 考虑如何算答案
  • 由于第一个数可以随便取,所以答案为
  • 1m∑i=1m(1+f[i])\frac1m\sum_{i=1}^m(1+f[i])m1​i=1∑m​(1+f[i])
  • 看到某人的提交记录里有吊打标算的非 DP 做法,复杂度仿佛是 O(mlog⁡m)O(m\log m)O(mlogm) ,所以有更优做法欢迎提出

代码

  • 该代码中的 f[i]f[i]f[i] 表示的是题解中的 f[i]f[i]f[i] 加一,答案为 1m∑i=1mf[i]\frac1m\sum_{i=1}^mf[i]m1​∑i=1m​f[i] ,边界为 f[1]=1f[1]=1f[1]=1 ,见谅
#include <bits/stdc++.h>// 20030830inline int read()
{int res = 0; bool bo = 0; char c;while (((c = getchar()) < '0' || c > '9') && c != '-');if (c == '-') bo = 1; else res = c - 48;while ((c = getchar()) >= '0' && c <= '9')res = (res << 3) + (res << 1) + (c - 48);return bo ? ~res + 1 : res;
}const int N = 1e5 + 5, ZZQ = 1e9 + 7;int qpow(int a, int b)
{int res = 1;while (b){if (b & 1) res = 1ll * res * a % ZZQ;a = 1ll * a * a % ZZQ;b >>= 1;}return res;
}int n, f[N], miu[N], tot, pri[N], inv[N], wt[N], num[N], res[N], ans;
bool mark[N];
std::vector<int> divi[N], cont[N];int solve(int n, int m)
{int tt = divi[m].size(), res = 0;for (int i = 0; i < tt; i++){int x = divi[m][i];res += miu[x] * (n / x);}return res;
}void sieve()
{mark[0] = mark[miu[1] = 1] = 1;for (int i = 2; i <= n; i++){if (!mark[i]) miu[pri[++tot] = i] = -1;for (int j = 1; j <= tot; j++){if (1ll * i * pri[j] > n) break;mark[i * pri[j]] = 1;if (i % pri[j] == 0) break;else miu[i * pri[j]] = -miu[i];}}for (int i = 1; i <= n; i++)for (int j = i; j <= n; j += i)divi[j].push_back(i);for (int i = 1; i <= n;){int nxt = n / (n / i);for (int j = 1; j <= n / i; j++) res[j] = solve(n / i, j);for (int j = i; j <= nxt; j++)for (int k = j; k <= n; k += j)cont[k].push_back(res[k / j]);i = nxt + 1;}
}int main()
{n = read();inv[1] = 1;for (int i = 2; i <= n; i++)inv[i] = 1ll * (ZZQ - ZZQ / i) * inv[ZZQ % i] % ZZQ;sieve();f[1] = 1;for (int i = 2; i <= n; i++){int tt = divi[i].size();for (int j = 0; j < tt; j++)wt[j + 1] = 1ll * inv[n] * cont[i][j] % ZZQ, num[j + 1] = divi[i][j];int qt = qpow((1 - wt[tt] + ZZQ) % ZZQ, ZZQ - 2);for (int j = 1; j < tt; j++) wt[j] = 1ll * wt[j] * qt % ZZQ;f[i] = qt;for (int j = 1; j < tt; j++)f[i] = (1ll * wt[j] * f[num[j]] + f[i]) % ZZQ;}for (int i = 1; i <= n; i++)ans = (1ll * inv[n] * f[i] + ans) % ZZQ;std::cout << ans << std::endl;return 0;
}

E

题意

  • 有 mmm 个集合和 nnn 个元素,每个元素一开始属于恰好一个集合,且第 iii 个元素的属性值为 pip_ipi​
  • 在每个集合中挑选一个元素(如果该集合为空就不要挑选),使得挑选出的所有元素的属性值的 mex\text{mex}mex 最大
  • mex\text{mex}mex 表示最小没有出现过的自然数
  • 你需要在每次删掉一个元素之后回答这个 mex\text{mex}mex 的最大值
  • 1≤m≤n≤50001\le m\le n\le50001≤m≤n≤5000 , 0≤pi≤50000\le p_i\le50000≤pi​≤5000

算法:二分图匹配

  • 建一张二分图,一侧是属性值,一侧是集合,对于每个元素 iii 由 pip_ipi​ 向其所属集合连一条边
  • 这样,如果 xxx 为满足属性值 [0,x][0,x][0,x] 都能找到匹配的最大 xxx ,答案就是 x+1x+1x+1
  • 发现二分图删边不好处理,所以考虑倒着加边,在加边的过程中维护最大匹配
  • 维护当前的最大 xxx
  • 当加一条边之后,需要更新匹配数
  • 具体地,尝试对点 x+1x+1x+1 寻找匹配
  • 如果找得到匹配则将 xxx 加一,否则停止当前的匹配
  • 由于属性值一侧的每个点最多寻找一次匹配,所以复杂度 O(nmax⁡p)O(n\max p)O(nmaxp)

代码

#include <bits/stdc++.h>// 20030830inline int read()
{int res = 0; bool bo = 0; char c;while (((c = getchar()) < '0' || c > '9') && c != '-');if (c == '-') bo = 1; else res = c - 48;while ((c = getchar()) >= '0' && c <= '9')res = (res << 3) + (res << 1) + (c - 48);return bo ? ~res + 1 : res;
}template <class T>
inline T Max(const T &a, const T &b) {return a > b ? a : b;}const int N = 3e4 + 5;int n, m, tot, p[N], c[N], d, k[N], ecnt, nxt[N], adj[N], go[N], ans[N],
QAQ, vis[N], my[N], now;
bool del[N];void add_edge(int u, int v)
{nxt[++ecnt] = adj[u]; adj[u] = ecnt; go[ecnt] = v;
}bool dfs(int u)
{for (int e = adj[u], v = go[e]; e; e = nxt[e], v = go[e])if (vis[v] < QAQ){vis[v] = QAQ;if (my[v] == -1 || dfs(my[v]))return my[v] = u, 1;}return 0;
}bool find_match(int x)
{QAQ++; return dfs(x);
}int main()
{memset(my, -1, sizeof(my));n = read(); m = read();for (int i = 1; i <= n; i++) tot = Max(tot, p[i] = read());for (int i = 1; i <= n; i++) c[i] = read();d = read();for (int i = 1; i <= d; i++) del[k[i] = read()] = 1;for (int i = 1; i <= n; i++) if (!del[i]) add_edge(p[i], tot + c[i]);for (int i = d; i >= 1; i--){while (now <= tot && find_match(now)) now++;ans[i] = now;add_edge(p[k[i]], tot + c[k[i]]);}for (int i = 1; i <= d; i++) printf("%d\n", ans[i]);return 0;
}

F

题意

  • nnn 种菜和 mmm 个人
  • 每种菜 iii 有三个属性 pi,si,bip_i,s_i,b_ipi​,si​,bi​
  • 每个人 jjj 有两个属性 incj,prefjinc_j,pref_jincj​,prefj​
  • 一个人 jjj 能品尝菜 iii 当且仅当 pi≤incj≤sip_i\le inc_j\le s_ipi​≤incj​≤si​ 且 ∣bi−prefj∣≤incj−pi|b_i-pref_j|\le inc_j-p_i∣bi​−prefj​∣≤incj​−pi​
  • 求每个人能品尝多少种菜
  • 1≤n,m≤1051\le n,m\le 10^51≤n,m≤105 ,其他数据均为 10910^9109 级别

算法:扫描线 + 树状数组

  • 此题有一个非常套路的 O((n+m)log⁡2n)O((n+m)\log^2n)O((n+m)log2n) 做法( CDQ 分治)和一个比较妙的官方题解做法,复杂度少一个 log⁡\loglog ,下面只讨论后者
  • 首先, ∣bi−prefj∣≤incj−pi|b_i-pref_j|\le inc_j-p_i∣bi​−prefj​∣≤incj​−pi​ 就相当于 bi−prefj≤incj−pib_i-pref_j\le inc_j-p_ibi​−prefj​≤incj​−pi​ 且 prefj−bi≤incj−pipref_j-b_i\le inc_j-p_iprefj​−bi​≤incj​−pi​
  • 把问题抽象到二维平面上,一个点 (x,y)(x,y)(x,y) 表示一个人的 incincinc 为 xxx , prefprefpref 为 yyy
  • 整理一下得出条件
  • (1) pi≤incj≤sip_i\le inc_j\le s_ipi​≤incj​≤si​
  • (2) incj+prefj≥bi+piinc_j+pref_j\ge b_i+p_iincj​+prefj​≥bi​+pi​
  • (3) prefj−incj≤bi−pipref_j-inc_j\le b_i-p_iprefj​−incj​≤bi​−pi​
  • 这相当于点 (incj,prefj)(inc_j,pref_j)(incj​,prefj​) 位于如下图所示的三角形内(含边界)
  • 考虑扫描线,把所有人离线按照 incincinc 排序,按照 xxx 坐标递增的顺序扫描,当扫到 bib_ibi​ 时加入第 iii 个三角形的影响,扫到 si+1s_i+1si​+1 时去除第 iii 个三角形的影响
  • 我们对于每个人 (incj,prefj)(inc_j,pref_j)(incj​,prefj​) 需要询问这个点在多少个三角形内
  • 考虑差分,也就是说当 x=x0x=x_0x=x0​ 时,如果直线 x=x0x=x_0x=x0​ 经过了第 iii 个三角形且 yyy 坐标范围 [l,r][l,r][l,r] 被第 iii 个三角形覆盖,则在 lll 处贡献 111 , r+1r+1r+1 处贡献 −1-1−1 ,则当 incj=x0inc_j=x_0incj​=x0​ 时,单点询问 (incj,prefj)(inc_j,pref_j)(incj​,prefj​) 转化成询问前缀和 prefjpref_jprefj​
  • 于是我们考虑第 iii 个三角形的影响,可以看成
  • (1)在直线 x+y=bi+pix+y=b_i+p_ix+y=bi​+pi​ 上贡献 111
  • (2)在直线 y−x=bi−pi+1y-x=b_i-p_i+1y−x=bi​−pi​+1 上贡献 −1-1−1
  • 消除第 iii 个三角形的影响则同理
  • 询问相当于询问横坐标为 incjinc_jincj​ ,纵坐标不超过 prefjpref_jprefj​ 的贡献之和
  • 用两个数据结构 AAA 和 BBB 分别记录 x+yx+yx+y 和 y−xy-xy−x 的贡献
  • 直线 x+y=kx+y=kx+y=k 能为 (incj,prefj)(inc_j,pref_j)(incj​,prefj​) 贡献当且仅当 k≤incj+prefjk\le inc_j+pref_jk≤incj​+prefj​
  • 所以加入第 iii 个三角形时,在数据结构 AAA 的 bi+pib_i+p_ibi​+pi​ 处进行单点加 111
  • 直线 y−x=ky-x=ky−x=k 能为询问贡献当且仅当 k≤prefj−incjk\le pref_j-inc_jk≤prefj​−incj​
  • 所以加入第 iii 个三角形时,在数据结构 BBB 的 bi−pi+1b_i-p_i+1bi​−pi​+1 处进行单点加 111
  • 这样第 jjj 个询问的答案就是当 xxx 扫描到 incjinc_jincj​ 时,数据结构 AAA 的前缀和 incj+prefjinc_j+pref_jincj​+prefj​ 减去数据结构 BBB 的前缀和 prefj−incjpref_j-inc_jprefj​−incj​
  • 可以用树状数组等实现
  • 复杂度 O((n+m)log⁡(n+m))O((n+m)\log(n+m))O((n+m)log(n+m))

代码

#include <bits/stdc++.h>// 20030830inline int read()
{int res = 0; bool bo = 0; char c;while (((c = getchar()) < '0' || c > '9') && c != '-');if (c == '-') bo = 1; else res = c - 48;while ((c = getchar()) >= '0' && c <= '9')res = (res << 3) + (res << 1) + (c - 48);return bo ? ~res + 1 : res;
}const int N = 1e5 + 5, M = N << 2;int n, m, p[N], s[N], b[N], inc[N], pref[N], tot, a[M], A[M], B[M], cnt, ans[N];struct node
{int tm, x, y, op, id;
} que[M];inline bool comp(node a, node b)
{return a.tm < b.tm || (a.tm == b.tm && a.op < b.op);
}void changeA(int x, int v)
{for (; x <= tot; x += x & -x)A[x] += v;
}int askA(int x)
{int res = 0;for (; x; x -= x & -x)res += A[x];return res;
}void changeB(int x, int v)
{for (; x <= tot; x += x & -x)B[x] += v;
}int askB(int x)
{int res = 0;for (; x; x -= x & -x)res += B[x];return res;
}int main()
{n = read(); m = read();for (int i = 1; i <= n; i++) p[i] = read();for (int i = 1; i <= n; i++) s[i] = read();for (int i = 1; i <= n; i++) b[i] = read();for (int i = 1; i <= m; i++) inc[i] = read();for (int i = 1; i <= m; i++) pref[i] = read();for (int i = 1; i <= n; i++)a[++tot] = p[i] + b[i], a[++tot] = b[i] - p[i] + 1;for (int i = 1; i <= m; i++)a[++tot] = inc[i] + pref[i], a[++tot] = pref[i] - inc[i];std::sort(a + 1, a + tot + 1);int tt = std::unique(a + 1, a + tot + 1) - a - 1;tot = tt;for (int i = 1; i <= n; i++)que[++cnt] = (node) {p[i], p[i], b[i], 1, 0},que[++cnt] = (node) {s[i] + 1, p[i], b[i], -1, 0};for (int i = 1; i <= m; i++)que[++cnt] = (node) {inc[i], inc[i], pref[i], 2, i};std::sort(que + 1, que + cnt + 1, comp);for (int i = 1; i <= cnt; i++)if (que[i].op <= 1){changeA(std::lower_bound(a + 1, a + tot + 1,que[i].x + que[i].y) - a, que[i].op);changeB(std::lower_bound(a + 1, a + tot + 1,que[i].y - que[i].x + 1) - a, que[i].op);}else ans[que[i].id] = askA(std::lower_bound(a + 1, a + tot + 1,que[i].x + que[i].y) - a) -askB(std::lower_bound(a + 1, a + tot + 1,que[i].y - que[i].x) - a);for (int i = 1; i <= m; i++) printf("%d ", ans[i]);return puts(""), 0;
}

[题解][Codeforces 1139A~1139F]Codeforces Round #548 (Div. 2) 简要题解相关推荐

  1. # Codeforces Round #548 (Div. 2)C Edgy Trees

    Codeforces Round #548 (Div. 2)C Edgy Trees 题目传送门 You are given a tree (a connected undirected graph ...

  2. Codeforces Round #686 (Div. 3) A-F题解

    Codeforces Round #686 (Div. 3) A-F题解 A. Special Permutation 题意 给定 nnn ,输出一个长度为 nnn 的全排列,每个位置 iii 上的数 ...

  3. Codeforces Round #693 (Div. 3)部分题解

    Codeforces Round #693 (Div. 3) 部分题解 D. Even-Odd Game 思路: 贪心:田忌赛马 (1)先将数组从大到小排序,取数时从大到小取,用一个ans变量记录取数 ...

  4. Codeforces Round #702 (Div. 3)A-G题解

    Codeforces Round #702 (Div. 3)A-G题解 比赛链接:https://codeforces.ml/contest/1490 这场F读错题意白给一发,G二分的if(dp[mi ...

  5. codeforces Round #645 (Div. 2)D题解

    Codeforces Round #645 (Div. 2)--D题解 作为一名菜鸡,理所当然得没有A出来,这道题数据放小就一水题了,可惜数据这块卡的死死的. 本题最重要的一点就是你要推出来一个结论: ...

  6. Codeforces Round #670 (Div. 2)A-D题解

    Codeforces Round #670 (Div. 2)A-D题解 //写于rating值1987/2184 //补档 比赛链接:https://codeforces.ml/contest/140 ...

  7. Codeforces Round #674 (Div. 3)A-F题解

    Codeforces Round #674 (Div. 3)A-F题解 比赛链接:https://codeforces.com/contest/1426 A题 水题不写题解 #include<b ...

  8. Codeforces Round #807 (Div. 2) A-C题解

    Codeforces Round #807 (Div. 2) A.B.C题题解 A - Mark the Photographer 题意:马克要给2n个人照相,分两排,一排站n人,给出每个人的身高,要 ...

  9. Codeforces Round #723 (Div. 2) 个人题解

    上1400辣! 传送门:https://codeforces.com/contest/1526 A. Mean Inequality 题意 给一个长度为偶数的数组,你需要重排这个数组,使得任意一个数不 ...

最新文章

  1. SpringMVC 运行过程
  2. [YTU]_2617(B C++时间类的运算符重载)
  3. 利用flask将opencv实时视频流输出到浏览器
  4. 【PAT】A1063 Set Similarity
  5. python调用matlab环境配置、非常详细!!!_Python调用Matlab2014b引擎
  6. python基础(part11)-作用域LEGB
  7. 中专选计算机应用很难,对中专计算机应用基础改革的思考.pdf
  8. 条码生成代码(Code39码)
  9. 使用ASP.NET Core 3.x 构建 RESTful API - 3.2 开始建立Controller和Action
  10. Linux获取本机hostname函数,Linux下获得主机与域名-gethostbyname和gethostbyaddr
  11. 使用named_mutex实现锁机制
  12. Linux Shell脚本入门教程系列之(十六) Shell输入输出重定向
  13. 【英语学习】【Level 07】U02 Live Work L2 A place to call my home
  14. Python根据字符分组数量判断密码安全强度
  15. 提高sql性能的方法_三种提高T-SQL性能的方法
  16. 没有安装opencv的linux系统上运行基于opencv,Linux环境下安装OpenCV
  17. Redis数据结构04-SortedSet
  18. 展示全面快速响应能力 华为全线解决方案亮相北京国际通信展
  19. python可以下载百度文库_Python在线百度文库爬虫(免下载券)
  20. 爬取招聘信息并进行数据分析及可视化

热门文章

  1. 使用51单片机编写计时器(分钟,秒钟分离版)
  2. MATLAB写UCB算法,科学网—【RL系列】Multi-Armed Bandit问题笔记——UCB策略实现 - 管金昱的博文...
  3. 安卓虚拟摄像头_华为Mate 40 Pro爆料,后置摄像头类似苹果iPod
  4. Xcode 真机调试失败:Errors were encountered while preparing your device for development
  5. 美国大选2020推特相关数据
  6. 【今日收获】关于[Error] expected identifier before ‘*‘ token的解决办法
  7. 运动世界校园一直显示服务器开小差,运动世界校园跑步异常 运动世界跑步成绩异常怎么办...
  8. 手写Android热修复
  9. 5行等腰三角形php,cad等腰三角形怎么画
  10. stm32内部Flash读写