一个问题

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

题目: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 }
时间: 2024-11-06 19:58:34

一个问题的相关文章

mongodb的增、删、改、插的一个实例

创建一个学生信息表(至少包含:姓名,性别,成绩,年龄) 1.写入十五条不同的数据 db.students.insertMany([{ name: "bob", age: 16, sex: "male", grade: 95},{ name: "ahn", age: 18, sex: "female", grade: 45},{ name: "xi", age: 15, sex: "male&quo

SqlServer给一个表增加多个字段语法

添加字段语法 alter table table_name add column_name +字段类型+ 约束条件 给一个表增加多个字段: use NatureData go alter table XunHu add MaleCount varchar(50) null, FemaleCount varchar(50) null, SubadultCount varchar(50) null, LarvaeCount varchar(50) null, TraceType varchar(50

Linux 将文件夹下的所有文件复制到另一个文件里

如何将文件夹/home/work下的文件复制到/home/temp里面? 使用命令: cp -R /home/work/* /home/temp *表示所有文件 但是/home/work 下的隐藏文件都不会被拷贝 更好的复制的方法是用"."代替"*"就好了. cp -R /home/work/.  /home/temp 将一个文件夹复制到另一个文件夹下,例如将/home下的work文件夹复制到temp下面 命令为: cp -R /home/work  /home/t

如何用一个app操作另外一个app.比如微信群控那样的

如何实现一个app.控制另外的app,比如市面上群控微信的,是用测试工具的原理?还是什么模拟点击的原理? 如何用一个app操作另外一个app.比如微信群控那样的 >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007186891/如何用一个app操作另外一个app比如微信群控那样的.html

温习一个简单的HTML例子

<!--程序ch02_1.html--> <html> <head> <title>第一个HTML网页</title> </head> <body text="blue"> Heelo,<b>world</b>! <hr size="5px" align="left" color="red" width="

使用ansible快速部署一个主流的Web架构

拓扑: 拓扑说明: 两台服务器配置Keepalived+Nginx做双主模型的Load Balance,主机名为lb1和lb2 两台服务器配置lamp,用于处理动态资源请求,主机名为lamp1和lamp2 两台服务器配置varnish作为静态资源缓存服务器,主机名为varnish1和varnish2 两台服务器配置Nginx用于处理静态资源请求 额外需要一台服务器安装ansible,使用ansible批量管理所有服务器 关键技术点: 1. Keepalived配置了邮件报警脚本,当节点的状态发生

自定义及发布一个webservice服务

自定义及发布一个webservice服务    - 声明 某个业务服务为webservice服务       通过@webservice 注解来声明    - 发布webservice服务       Endpoint.publish()发布 (默认对public修饰的方法进行发布)    - 通过wsimport生成本地代理来访问自己发布的webservice       wsimport 1.发布自定义webservice phone.java package ws.myWebService

通过beego快速创建一个Restful风格API项目及API文档自动化(转)

通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界面. 一.创建数据库及数据表(MySQL) #db--jeedev -- ---------------------------- -- Table structure for `app` -- ---------------------------- DROP TABLE IF EXISTS `a

windows10上使用一个tomcat部署2个项目

前言:目前想在本机部署2个项目,网上查了之后,写下本篇随笔 1.准备工作 2.操作方法 3.运行2个项目 1.准备工作 2个war包(一个jprss.war和一个jenkins.war) 1个tomcat环境 2.操作方法 第一步:复制tomcat中的webapps文件夹,命名为webapps1和webapps2 第二步:复制tomcat\conf\Catalina文件夹,命名为Catalina1和Catalina2 第三步:修改tomcat中的server.xml文件: 将从<Service

一个实用的C#网页抓取类代码分享

一个实用的C# 网页抓取类 模拟蜘蛛,类中定义了超多的C#采集文章.网页抓取文章的基础技巧,下面分享代码: using System; using System.Data; using System.Configuration; using System.Net; using System.IO; using System.Text; using System.Collections.Generic; using System.Text.RegularExpressions; using Sys