一个问题

Posted Unbelievable

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个问题相关的知识,希望对你有一定的参考价值。

做题的时候碰到的,不太明白为什么。

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4585

如果用我注释的写法就会超时,而我用注释上面的写法就会快很多,目前的猜测是set的lower_bound做了针对性的优化。。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 set<int> s;
 4 map<int,int> mp;
 5 int main(){
 6     int n;
 7     while(scanf("%d",&n) && n){
 8         s.clear();
 9         mp.clear();
10         s.insert(1000000000);
11         mp[1000000000] = 1;
12         int id,grade;
13         for(int i = 0;i<n;i++){
14             scanf("%d%d",&id,&grade);
15             
16             set<int>::iterator it1 = s.lower_bound(grade),it2;
17             //这样写不知道为什么会超时 
18             //set<int>::iterator it1,it2;
19             //it1 = lower_bound(s.begin(),s.end(),grade);
20             if(it1 == s.begin()){
21                 printf("%d %d\n",id,mp[*it1]);
22                 s.insert(grade);
23                 mp[grade] = id;
24                 continue;
25             }
26             it2 = it1;
27             it1--;
28             if(it2 == s.end()){
29                 printf("%d %d\n",id,mp[*it1]);
30             }else if(grade-*it1 <= *it2-grade){
31                 printf("%d %d\n",id,mp[*it1]);
32             }else{
33                 printf("%d %d\n",id,mp[*it2]);
34             }
35             s.insert(grade);
36             mp[grade] = id;
37         }
38     }
39     return 0;
40 }

 

以上是关于一个问题的主要内容,如果未能解决你的问题,请参考以下文章

当活动被破坏但我必须继续执行片段中的代码时该怎么办?

动态 Rstudio 代码片段

为啥这个代码片段说包含错误?

如何正确地将多个片段添加到片段过渡?

VsCode 代码片段-提升研发效率

这两个代码片段有啥区别?