一.题目 OpenStreetMap 二.分析 对于二维空间找区间最小值,那么一维的很多好用的都无法用了,这里可以用单调队列进行查找. 先固定一个坐标,然后进行一维的单调队列操作,维护一个区间长度为$b$的最小值,可以确定一个数组$ans$. 对于新数组,进行另一个维度的单调队列操作,找到$a*b$的最小值.(由于英语太差,读题目时理解成了是点在区间左上角的意思) 写的时候一定注意第二次单调队列的对象数组是新数组. 三.AC代码 1 #include <bits/stdc++.h> 2 3 u…
题目链接 题目的意思就是给你一个矩阵你要求给定子矩阵的最小值的和 单调队列扫两边即可 #include <bits/stdc++.h> #define ll long long #define inf 0x3f3f3f3f using namespace std; const int N = 1e7+7; const double eps = 1e-8; ll G[3007][3007]; ll col[3007][3007]; ll q[3007]; int main(){ ios::syn…
目录 Contest Info Solutions A. Drinks Choosing B. Sport Mafia C. Basketball Exercise D1. Submarine in the Rybinsk Sea (easy edition) D2. Submarine in the Rybinsk Sea (hard edition) E. OpenStreetMap Contest Info Practice Link Solved A B C D1 D2 E F 6/7…
A. Drinks Choosing 有 $n$ 个人,每个人各有一种最喜欢的饮料,但是买饮料的时候只能同一种的两个两个买(两个一对) 学校只打算卖 $\left \lceil \frac{n}{2} \right \rceil$ 对 这意味着有些学生喝不到最喜欢的饮料,求最多有多少学生能喝的最喜欢的饮料 人数和饮料种数均小于等于 $1000$ 直接贪心,对于喜欢同一种饮料的学生中,如果人数为奇数,要么单独买一对,然后把另一个给不喜欢这种饮料的人 要么喝自己不喜欢的饮料,设喜欢某种饮料的学生人数…
比赛链接 传送门 A题 题意 \(n\)个人每个人都有自己喜欢喝的\(vechorka\)口味,现在给你\(\lceil n/2\rceil\)箱\(vechorka\),每箱有两瓶,问最多能有多少个人能拿到自己喜欢的口味. 思路 我们首先记录每个口味有多少个人喜欢,然后要想拿到自己喜欢的口味最大那么一定要优先考虑能凑偶数的,把偶数考虑完后剩余的口味一定都是\(1\),就不管怎么分都只能满足一半的人. 代码实现如下 #include <set> #include <map> #in…
构造出的结果一定是一个单峰/\这种样子的 #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ]; pair<]; ],r[];//记录左/右边最近的比当前小的位置 ]; ][];//dp[0][i]表示当a[i]在1~i上单调增时,高度的前缀和,dp[1][i]表示a[i]在i~n单调减时,高度的后缀和(单调可以平,相邻可以相等) int main(){ ios::sync_with_std…
D. Mike and Feet time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Mike is the president of country What-The-Fatherland. There are n bears living in this country besides Mike. All of them are…
题目传送门 题意: 输入n,给出两组均为 n个数字的数组a和b,轮流从a和b数组中取出一个数字,要求严格按照当前所选数字的数组下标比上一个所选数字的数组下标更大,计算能够取出的数字加起来的总和最大能为多少. 测试样例1: 输入: 5 9 3 5 7 3 5 8 1 4 5 输出:29 提示:选择下面划线标记的数字(9 8 5 4 3) 9 3 5 7 3 5 8 1 4 5 测试样例2: 输入: 3 1 2 9 10 1 1 输出:19 提示:(选择10 9) 1 2 9 10 1 1 题解:…
A. Drinks Choosing 统计每种酒有多少人偏爱他们. ki 为每种酒的偏爱人数. 输出ans = (n + 1)/2 >  Σki / 2 ? (n + 1)/2 - Σki / 2 + (Σki / 2)  * 2 : (n + 1)/2 * 2 #include<iostream> #include<algorithm> using namespace std; int n,k; +; int a[L]; int main() { cin>>n&…
一.题目 D2. Submarine in the Rybinsk Sea (hard edition) 二.分析 相比于简单版本,它的复杂地方在于对于不同长度,可能对每个点的贡献可能是有差异的. 但是,题目已经说明$a_{i}$最大知道10的9次方,那么$a_{i}$的长度最大也只有10,所以,我们可以按长度进行分组讨论. 需要注意的是,$a_{i}$确定了在前和在后并且确定了$f(a_{i},b_{i})$中的$b_{i}$的长度后,$a_{i}$对各个位置的贡献其实就确定了,相当于对于每一…