给定一个全排列,对于它的每一个子序列 \(s[1..p]\),对于每一个 \(i \in [1,p-1]\),给 \(s[i],s[i+1]\) 间的每一个值对应的桶 \(+1\),求最终每个桶的值. Solution 对于一对 \((i,j), i<j, p[i]<p[j]\),其对 \(k \in (p[i],p[j])\) 有 \(2^{(i-1)+(n-j)}\) 的贡献 于是我们得到了 \(O(n^2 \log n)\) 暴力 考虑枚举左侧的 \(i\),它会与右侧 \(p[j]&g…
[Tjoi2016&Heoi2016]序列 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1006  Solved: 464[Submit][Status][Discuss] Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值 可能会变化,但同一个时刻最多只有一个值发生变化.现在佳媛姐姐已经研究出了所有变化的可能性,她想请教你 ,能否选出一个子序列,使得在任意一种变化中,这…
Counting Offspring Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2424 Accepted Submission(s): 838 Problem DescriptionYou are given a tree, it’s root is p, and the node is numbered from 1 to n. N…
正题 题目链接:https://ac.nowcoder.com/acm/contest/72/F 题目大意 \(n\)个字符串,包括小写字母和\(\#\).其中\(\#\)可以替换为任意字符串.求有多少对字符串可能相同. 保证每个字符串至少有一个\(\#\). \(2\leq n\leq 500000,\sum_{i=1}^n |s_i|\leq 10^6\) 解题思路 因为可以替换为任意字符串,所以只需要考虑第一个\(\#\)前和最后一个\(\#\)后的部分. 在仔细考虑一下,这个字符串分成前…
给定 \(m\) 个询问,每个询问是一个区间 \([l,r]\),你需要通过自由地设定每个节点的 \(mid\),设计一种"自适应线段树",使得在这个线段树上跑这 \(m\) 个区间询问时,需要访问节点的次数最少. Solution 对于询问 \([ql,qr]\) 和结点 \([l,r]\) 如果 \([ql,qr]\) 与 \([l,r]\) 相交但不包含,贡献为 \(1\) 如果 \([ql,qr]\) 包含 \([l,r]\) 如果 \(l=r\),则贡献 \(1\) 如果 \…
给定一个 \(n \times n\) 矩阵,先进行 \(m_1 \leq 5e4\) 次区间加,再进行 \(m_2 \leq 5e5\) 次询问,每次询问要求输出矩形区间内的最大数.\(n \leq 2000\) Solution 考虑到 \(n\) 比较小,可以直接二位差分前缀和搞出整个矩阵. 然后一本正经地扔进二维线段树 二维线段树怎么写来着? 卡常致死 返回值慢得让人恶心 #include <bits/stdc++.h> using namespace std; #define ll…
给定一个序列,可以执行 \(k\) 次操作,每次选择连续的三个位置,将他们都变成他们的最大值,最大化 \(\sum a_i\) 需要对每一个 \(k=i\) 输出答案 \(n \leq 50, a_i \leq 20\),数据组数 \(\leq 100\) Solution 我们考虑将这些数分段,每段刷成区间内的最大值,那么很显然就可以 DP 了 \(f[i][j]\) 表示搞定了前 \(i\) 个数,操作了 \(j\) 次,则转移方程 \[ f[i][j]=\max_k (f[k][j-\fr…
给定一个长 \(n\) 的序列 \(a_1,\dots,a_n\),定义 \(f(x)\) 为有多少个 \(a_i \leq x\) 有 \(q\) 次询问,每次给定 \(l,r,x\),求 \(\sum_{i=l}^r f(i \ xor\ x)^2\) Solution 定义 \(S*x={y \ xor \ x|y \in S}\),\((x)_i\) 表示 \(x\) 第 \(i\) 位的值,则所求为 \(\sum_{y\in[L,R]*x} f^2(y)\),差分一下,只需要求 \(\…
给定两个常为 \(n\) 的序列 \(l_i,r_i\),问夹在它们之间 ( \(\forall i, l_i \leq a_i \leq r_i\) ) 的不降序列的元素总和. Solution 先搞一波离散化,把 设 \(f[i][j]\) 表示处理完了 \(a[1\dots i]\),且 \(a[i]\) 在第 \(j\) 个区间内的总和, \(g[i][j]\) 为方案数 考虑运用分段的思想,枚举下一段的结束点 \(p\),以及下一段所在区间 \(k\),就可以暴力转移到 \(f[p][…
你方有 \(n\) 个人,攻击力和血量都是 \(1\).对方有 \(a\) 个普通人, \(b\) 个只有盾的,\(c\) 个只有嘲讽的,\(d\) 个有盾又有嘲讽的,他们的攻击力和血量都是无穷大.有盾的可以抵挡一次攻击,有嘲讽的必须先被杀掉,才能杀没有嘲讽的. 你方的 \(n\) 个人排成一排,从左向右依次出击,你知道它们每个是否有剧毒属性(即攻击力为无穷大). 每次出击选定的对方是被色子控制的.问你能打败多少个对方人,求最大值和最小值. 数据组数 \(\leq 100\),所有数据 \(\l…