C.Minimum Array(二分+set)
题目描述:


知识点:
lower_bound和uper_bound
lower_bound(起始地址,结束地址,要查找的数值) 返回的是数值 第一个 出现的位置。
upper_bound(起始地址,结束地址,要查找的数值) 返回的是数值 最后一个 出现的位置。
binary_search(起始地址,结束地址,要查找的数值) 返回的是是否存在这么一个数,是一个bool值。
lower_bound(val):返回容器中第一个值【大于或等于】val的元素的iterator位置。
upper_bound(val): 返回容器中第一个值【大于】val的元素的iterator位置
使用:
int low=lower_bound(t.begin(),t.end(),)-t.begin(); int upp=upper_bound(t.begin(),t.end(),)-t.begin();
思路:
题目是说要让数组a的每一位与b中某一位相加取余后最小,找规律可得
a 对应b的“最好选择元素”的优先级为
0 0 1 2 ... n-1
1 n-1 0 1 ... n-2
2 n-2 n-1 0 ... n-3
...
n-1 1 2 3 ... 0
刚开始做法是真的列了一个大数组从0到200000,读入b的时候就直接把数字存到index对应的位置,如b[n]=n,然后根据不同的a[i]遍历整个b数组,结果超时
第二次把不用b那么大的数组,b中只存b[i],对b排序,对每个a[i]遍历b数组,因为b中对应a[i]最优先的数应为n-a[i]。在b中查找,如果找到,数字用掉并标记为-1;若没找到,按算法应返回的是不超过b的最后一个元素,此时将位置+1即可选取到次优先的a[i]对应的数,当然要选择大于等于0的数,即为使用的。结果超时
第三次不用标记-1,改用listr直接remove,想着是删除元素list应该比vector要快一点,结果超时
第四次想到既然排好序了,二分吧,刚好可以用lower_bound符合语义。结果超时
最后上网搜题解,用multiset的lower_bound,要更快。。。好像set的内部实现是平衡二叉树,所以更快?
不过最后提醒了我,既然排好序了,就该想到二分来提速(O(log n)),而不是傻傻的遍历一遍又一遍(O(n)).
下面是代码:
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#define max_n 200005
using namespace std;
int n;
vector<int> a;
multiset<int> b; int main()
{
cin >> n;
int nums;
for(int i = ;i<n;i++)
{
cin >> nums;
a.push_back(nums);
}
for(int i = ;i<n;i++)
{
cin >> nums;
b.insert(nums);
}
for(auto i = a.begin();i!=a.end();i++)
{
int num = n-*i;
//cout << "num " << num << endl;
set<int>::iterator j;
//for(j = b.begin();*j<num&&j!=b.end();j++);
j = b.lower_bound(num);
if(j!=b.end()&&(*j==num||*j>num))
{
*i = (*i+*j)%n;
}
else if(j==b.end())
{
j=b.begin();
*i=(*i+*j)%n;
}
//cout << "b " << b[j] << endl;
b.erase(j);
}
for(auto i = a.begin();i!=a.end();i++)
{
cout << *i << " ";
}
return ;
}
C.Minimum Array(二分+set)的更多相关文章
- Codeforces Round #555 (Div. 3) E. Minimum Array 【数据结构 + 贪心】
一 题面 E. Minimum Array 二 分析 注意前提条件:$0 \le a_{i} \lt n$ 并且 $0 \le b_{i} \lt n$.那么,我们可以在$a_{i}$中任取一个数 ...
- Leetcode 153. Find Minimum in Rotated Sorted Array -- 二分查找的变种
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...
- Codeforces Round #555 (Div. 3) E. Minimum Array (贪心,二分,set)
题意:给你两个长度为\(n\)的数组\(a\)和\(b\),元素值在\([0,n-1]\),可以对\(b\)数组的元素任意排序,求新数组\(c\),满足\(c_i=(a_i+b_i)\ mod\ n\ ...
- Codeforces Round #555 (Div. 3) E. Minimum Array
题意:b数组可以自由排序,c[i]=(a[i]+b[i])%n. 题目中要求c数组的字典序是最小的.那么我们需要尽量满足前面的c[i],才能使字典序最小. 我们知道a[i]和b[i]都是[0,n-1] ...
- 33. Search in Rotated Sorted Array(二分查找)
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...
- hdu 5587 Array 二分
Array Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Problem ...
- 34. Find First and Last Position of Element in Sorted Array + 二分
题意懒得抄了,大概是:在升序数组中给定整数target,找到第一个和最后一个target的索引,找到返回{index1, index2},否则返回{-1, -1}: 时间复杂度要求:O(logn) 分 ...
- Leetcode | Find Minimum in Rotated Sorted Array I && II
Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...
- Search in Sorted Array,Search in Rotated Sorted Array,Search in Rotated Sorted ArrayII
一:Search in Sorted Array 二分查找,可有重复元素,返回target所在的位置,只需返回其中一个位置,代码中的查找范围为[low,high),左闭右开,否则容易照成死循环. 代码 ...
随机推荐
- python安装 错误 “User installations are disabled via policy on the machine”
解决方法一: 1.在运行里输入 gpedit.msc 2.计算机配置管理>>管理模板>>windows组件>>windows Installer>> ...
- CentOS升级kernel
CentOS升级kernel 升级命令: yum update kernel yum update kernel-devel yum update kernel-firmware yum update ...
- 将笔记本无线网卡链接wifi通过有线网卡共享给路由器
1.背景 背景这个就说来长了,在公司宿舍住着,只给了一个账号,每次登录网页都特别麻烦(需要账号认证那种).然后每个账号只支持一个设备在线,这就很尴尬了,那我笔记本.手机.Ipad怎么办? 当然,这时候 ...
- c#中特性Attribute
接上篇: 特性介绍: 特性是一个类,需要间接或者直接继承Attribute父类,在标记特性时以中括号包裹,可以标记在元素之前.AttributeTargets.Class设置标记的元素,需要明确指定标 ...
- layui 自定义模块
新建模块目录modules 新建common.js layui.define(['jquery'], function (exports) { var $ = layui.jquery; var ob ...
- Centos7 yum方式安装MySQL
1.下载安装源 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 2.yum方式安装 yu ...
- Forbidden (CSRF token missing or incorrect.):
CSRF令牌失效或丢失,Ajax请求页面报错(403 Forbidden ) csrftoken存在 页面响应为CSRF验证失败请求被中断,经过测试,该错误并非是没有在表单中加入{% csrf_tok ...
- Vue框架(四)——路由跳转、路由传参、cookies、axios、跨域问题、element-ui模块
路由跳转 三种方式: $router.push / $router.go / router-link to this.$router.push('/course'); this.$router.pus ...
- LeetCode 5214. 最长定差子序列(Java)HashMap
题目: 5214. 最长定差子序列 给你一个整数数组 arr 和一个整数 difference,请你找出 arr 中所有相邻元素之间的差等于给定 difference 的等差子序列,并返回其中最长的等 ...
- dump net core lldb 分析
原文https://www.cnblogs.com/calvinK/p/9274239.html centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试) 写个dem ...