题意:给出n<5e4,a[1...n],单次1e5总次1e6次查询除去区间(L,R)的数的个数 开场5分钟:莫队是不可能莫队的,这道题是不可能莫队的 最后1小时:真香 具体操作没啥特别的,注意一下add和del是和实际相反的操作,以及开区间特判 然而这是卡着过去的.. 正解用裸主席树或其他dsa,只需把数组翻倍再拼接就好(我好菜啊 #include<iostream> #include<algorithm> #include<cstdio> #include<…
题意:给定n*m的格子,每个格子有不同的种类,q次操作,每次操作使[x1,y1]到[x2,y2]的格子除了k类型的以外都删除,最后单次询问所有格子被删了几个 官方题解提到了两种有意思的做法,随机和二进制分组 目前我写了随机的做法,简单粗暴好懂 (upd.劳资总算把二进制分组的给做出来了! 给每种类型打个随机权值,操作覆盖到的区间都加上这个权值 最后查询的时候只需这道这个点的值是不是该类型的权值的倍数就行了 就这么简单 实现上只需套路作差取前缀和就能得到单点的值,总复杂度\(O(n)\) (WA了…
题意: 标记为\(1-n\)的竹子,\(q\)个询问,每次给出\(l,r,x,y\).要求为砍区间\(l,r\)的柱子,要求砍\(y\)次把所有竹子砍完,每次砍的时候选一个高度,把比他高的都砍下来,并且这\(y\)次砍下来长度都相等,问第\(x\)次砍在什么高度. 思路: 显然就是要求选一个高度砍,使得剩下的高度为\((sum[r] - sum[l - 1]) - (sum[r] - sum[l - 1])/y * x\),那么直接建好主席树,然后二分出这个高度. 主席树好啊. 代码: #inc…
牛客多校第四场sequence C (线段树+单调栈) 传送门:https://ac.nowcoder.com/acm/contest/884/C 题意: 求一个$\max {1 \leq l \leq r \leq n}\left{\min \left(a{l \dots r}\right) \times \operatorname{sum}\left(b_{l \dots r}\right)\right} $ 题解: 枚举最小值 最大值可能有两种情况:两个正数相乘,两个负数相乘,我们先讨论正…
题目链接:https://www.nowcoder.com/acm/contest/139/J 题目描述  Given a sequence of integers a1, a2, ..., an and q pairs of integers (l1, r1), (l2, r2), ..., (lq, rq), find count(l1, r1), count(l2, r2), ..., count(lq, rq) where count(i, j) is the number of dif…
链接:https://ac.nowcoder.com/acm/contest/904/E 来源:牛客网 DongDong数颜色 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 DongDong是个喜欢数颜色的女孩子,她已经熟练地掌握了在序列上数颜色的操作,现在她开始学习如何在树上数颜色,现在给定一个n个点,n-1条边的树形图(视1号店为根),每个点有一个颜色,每次询问以x为根的子树中有…
珂朵莉给你一个长为n的序列,有m次查询 每次查询给两个数l,r 设s为区间[l,r]内所有数的乘积 求s的约数个数mod 1000000007 直接莫队暴力维护复杂度是$O(8m\sqrt{m})$. 看了官方题解, 序列权值比较小, 权值<1000的素数暴力维护, >1000的素数最多只有1个, 用莫队维护, 这样能优化掉8的常数. #include <iostream> #include <sstream> #include <algorithm> #i…
题意: 给出一个已知的哈希表.求字典序最小的插入序列,哈希表不合法则输出-1. 题解: 对于哈希表的每一个不为-1的数,假如他的位置是t,令s = a[t]%n.则这个数可以被插入当且仅当第s ~ t-1个数都不为-1且已经插入完成. 那么对于每一个这样的数,需要连t-s条边(s<=t)或者t+n-s条边(s>t). 总的边数有O(n^2)条.可以用线段树优化建图.最后跑一边拓扑排序. 对于不合法的情况,第s ~ t-1个数存在-1或者拓扑图存在环会导致不合法. #include <bi…
题意:给出n条铁路区间\([L,R]\),共有m个boom依时间顺序放置在\(k_i\)中,区间与\(k_i\)有交集的都被炸掉 求每次炸掉的铁路个数和最后输出所有id被炸的时间点 炸弹能炸到的区间满足\(L≤K≤R\) 因为\(L\)与\(R\)无关,将其关系改写为\(X≤K≤Y\), 对应于二维空间,铁路区间相当于一个点\((L,R)\),每次询问有多少个没被屏蔽的点满足\(X≤K\)且\(K≤Y\) 然后KD树乱搞剪枝就好 唯一的问题是屏蔽掉的点无法在push_up时再次更新两个维度的极左…
题意: 一共有n个宿舍,每个宿舍有4个人.给出第一年的人员分布和第二年的人员分布,问至少有多少人需要移动. 题解: 对于第一年的每个宿舍,向今年的每种组合连边.流量为1,费用为(4 - 组合中已在该宿舍的人数). 最后跑一边费用流. #include <bits/stdc++.h> using namespace std; typedef long long ll; ; const int INF = 0x3f3f3f3f; int n, k; ], y[]; ][]; typedef pai…