- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
https://codeforces.com/contest/1435/submission/96757666->使用set.upper_bound()
https://codeforces.com/contest/1435/submission/96761788->使用upper_bound(set.begin(),set.end())
我注意到set.upper_bound()比后者快(后者给出了超过时间限制)。这是为什么?
下面的代码给出了超过时间限制
int ind = *upper_bound(st.begin(), st.end(), mp[i], greater< int >());
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization("unroll-loops")
#include <bits/stdc++.h>
using namespace std;
# define ll long long int
# define ld long double
# define pb push_back
# define pp pop_back
# define ff first
# define ss second
# define mp make_pair
typedef priority_queue<ll, vector<ll>, greater<ll>> minheap;
typedef priority_queue<ll> maxheap;
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
void solve(){
int n;
cin>>n;
set<int, greater<int>>st;
st.insert(-1);
map<int,int> mp;
int p[2*n];
char s[2*n];
for(int i=0;i<2*n;i++)
{
cin>>s[i];
if(s[i]=='+')
st.insert(i);
else
{
cin>>p[i];
mp[p[i]]=i;
}
}
for(int i=1;i<=n;i++)
{
int ind = *upper_bound(st.begin(), st.end(), mp[i], greater< int>());
if(ind==-1||st.find(ind)==st.end())
{
// if (-) come before +
cout<<"NO\n";
return;
}
st.erase(ind);
p[ind] = i;
}
// cout<<endl;
stack<int>stc;
for(int i=0;i<2*n;i++)
{
if(s[i]=='+')
stc.push(p[i]);
else
{
if(stc.top()==p[i])
stc.pop();
else
{
//if element not in order given in language
cout<<"NO\n";
return ;
}
}
}
cout<<"YES\n";
for(int i=0;i<2*n;i++)
{
if(s[i]=='+')
cout<<p[i]<<endl;
}
return;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
IOS
int t = 1;
//cin >> t;
while(t--){
solve();
}
return 0;
}
具有“set.upper_bound()”的相同代码将在时间限制内执行。
int ind = *st.upper_bound(mp[i]);
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization("unroll-loops")
#include <bits/stdc++.h>
using namespace std;
# define ll long long int
# define ld long double
# define pb push_back
# define pp pop_back
# define ff first
# define ss second
# define mp make_pair
typedef priority_queue<ll, vector<ll>, greater<ll>> minheap;
typedef priority_queue<ll> maxheap;
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
void solve(){
int n;
cin>>n;
set<int, greater<int>>st;
st.insert(-1);
map<int,int> mp;
int p[2*n];
char s[2*n];
for(int i=0;i<2*n;i++)
{
cin>>s[i];
if(s[i]=='+')
st.insert(i);
else
{
cin>>p[i];
mp[p[i]]=i;
}
}
for(int i=1;i<=n;i++)
{
int ind = *st.upper_bound(mp[i]);
if(ind==-1||st.find(ind)==st.end())
{
// if (-) come before +
cout<<"NO\n";
return;
}
st.erase(ind);
p[ind] = i;
}
// cout<<endl;
stack<int>stc;
for(int i=0;i<2*n;i++)
{
if(s[i]=='+')
stc.push(p[i]);
else
{
if(stc.top()==p[i])
stc.pop();
else
{
//if element not in order given in language
cout<<"NO\n";
return ;
}
}
}
cout<<"YES\n";
for(int i=0;i<2*n;i++)
{
if(s[i]=='+')
cout<<p[i]<<endl;
}
return;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
IOS
int t = 1;
//cin >> t;
while(t--){
solve();
}
return 0;
}
最佳答案
set::upper_bound
将使用集合的功能来高效地搜索值(关于容器大小的对数)。
对于 std::upper_bound
,使用非LegacyRandomAccessIterators
,例如std::set
的迭代器(即LegacyBidirectionalIterator
),迭代器增量的数量是线性的。
关于c++ - set.upper_bound()和upper_bound(set.begin(),set.end())STL之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64536493/
在answers to this other question ,提供以下解决方案,由 OpenBSD 提供,为简洁起见重写, uint32_t foo( uint32_t limit ) { u
在一些 CP 竞赛中(这很重要),我使用了 2 个版本的 upper_bound 来查找我的 std::map 中的上限: 算法上限(1): auto itr = std::upper_bound(s
我下面的程序读取一个文本文件 (data.txt),使用 upper_bound() 来比较一个值,但它没有给出正确的值。我不明白为什么输出总是最后一个值。 #include #include #
假设 a 有一个可以计算为整数的类 A。 我们将 A 的 vector 作为输入,该 vector 按其 evaluate() 值排序。 如何找到评估值的上限? 我试过了,但它没有编译。 class
我是 STL 的新手,在 vector 上使用了 find() 和 upper_bound() 函数来找到 6 的位置。代码如下 #include using namespace std; int
我获得了一个在 map 顶部构建的类,具有以下K类型和V类型限制: K:可复制,可分配,小于可比性( key 并从C++ documentation of upper_bound(): templat
我了解到 C++ 中 map 的底层数据结构是一个自平衡的二叉搜索树。由于在这些数据结构中,查找键的下限和上限有很多用处,您会认为 map lower_bound 和 upper_bound 函数将为
我了解到 C++ 中 map 的底层数据结构是一个自平衡的二叉搜索树。由于在这些数据结构中,查找键的下限和上限有很多用处,您会认为 map lower_bound 和 upper_bound 函数将为
我有一个充满配对的多重 map 。我想遍历一个范围。 upper_bound 不会返回指向元素的迭代器,除非它找到第一个元素,其键大于传递给 upper_bound 的值。 我如何判断 upper_b
这个问题在这里已经有了答案: Is it defined to provide an empty range to C++ standard algorithms? (3 个答案) 关闭 8 年前。
我想找到数组中小于 K 的最大元素。我正在尝试使用 upper_bound() 函数: upper_bound(a,a+n,k, std::greater()); 对于 int a[4] = {1,
我有一个 C++ 映射,称为 tableMap,是一个 std::map . void processMap(int key) { std::map::const_iterator iter;
documentation for upper_bound状态: ...it attempts to find the element value in an ordered range [first
代码: #include "inc.h" #include #include #include #include using namespace std; class tt{ pu
Visual C++ 的 stdext::hash_set::upper_bound() 如何实现?工作? 哈希表如何让元素保持排序?! 我曾尝试阅读源代码,但很难破译 STL 代码……甚至在概念上,
我需要在组中处理类型为 Foo 的对象列表,共享对应于相同 Bar 值的质量。该列表已根据该质量进行了预先排序,因此我的想法是使用 std::upper_bound 来查找后续组的开始位置。 Bar
《C++ lower_bound()》一节中,系统地介绍了 lower_bound() 二分法查找函数的功能和用法,在此基础上,本节再讲解一个功能类似的查找函数,即 upper_bound() 函数。
我是 C++ 的新手,我正在尝试使用 lower_bound 和 upper_bound 对 vector 进行排序和搜索。这行代码对我来说是一个奇怪的错误: up = upper_bound(low
我想使用 std::upper_bound 查找某个容器中小于或等于提供值的对象范围。这使它成为一个很好的简单的单线! 问题是我只对与类的特定原始成员进行比较感兴趣。对容器进行排序没有问题,但是当我想
我是 C++ 的新手,我认为重载函数总是可以的,我的意思是: Function overloading in C++ You can have multiple definitions for the
我是一名优秀的程序员,十分优秀!