C. Tourist's Notes
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

A tourist hiked along the mountain range. The hike lasted for n days, during each day the tourist noted height above the sea level. On the i-th day height was equal to some integer hi. The tourist pick smooth enough route for his hike, meaning that the between any two consecutive days height changes by at most 1, i.e. for all i's from 1 to n - 1 the inequality |hi - hi + 1| ≤ 1 holds.

At the end of the route the tourist rafted down a mountain river and some notes in the journal were washed away. Moreover, the numbers in the notes could have been distorted. Now the tourist wonders what could be the maximum height during his hike. Help him restore the maximum possible value of the maximum height throughout the hike or determine that the notes were so much distorted that they do not represent any possible height values that meet limits |hi - hi + 1| ≤ 1.

Input

The first line contains two space-separated numbers, n and m (1 ≤ n ≤ 108, 1 ≤ m ≤ 105) — the number of days of the hike and the number of notes left in the journal.

Next m lines contain two space-separated integers di and hdi (1 ≤ di ≤ n, 0 ≤ hdi ≤ 108) — the number of the day when the i-th note was made and height on the di-th day. It is guaranteed that the notes are given in the chronological order, i.e. for all i from 1 to m - 1 the following condition holds: di < di + 1.

Output

If the notes aren't contradictory, print a single integer — the maximum possible height value throughout the whole route.

If the notes do not correspond to any set of heights, print a single word 'IMPOSSIBLE' (without the quotes).

Examples
input
8 2
2 0
7 0
output
2
input
8 3
2 0
7 0
8 3
output
IMPOSSIBLE
Note

For the first sample, an example of a correct height sequence with a maximum of 2: (0, 0, 1, 2, 1, 1, 0, 1).

In the second sample the inequality between h7 and h8 does not hold, thus the information is inconsistent.

思路:二分;

分别讨论第一个点前后最后一个点后,贪心选取最大,然后再二分每两个点之间能取得的最大值,当两个点的差大于两点间的距离时无解,复杂度(n*log(n));

 1 #include<iostream>
2 #include<algorithm>
3 #include<queue>
4 #include<stdlib.h>
5 #include<stack>
6 #include<stdio.h>
7 #include<string.h>
8 using namespace std;
9 typedef struct node
10 {
11 int day;
12 int hi;
13 } ss;
14 ss ans[1000005];
15 int main(void)
16 {
17 int n,m;
18 while(scanf("%d %d",&n,&m)!=EOF)
19 {
20 int i,j;
21 int flag = 0;
22 for(i = 0; i < m; i++)
23 scanf("%d %d",&ans[i].day,&ans[i].hi);
24 int maxx = -1;
25 for(i = 0; i < m; i++)
26 {
27 if(i == 0)
28 {
29 maxx = max(ans[i].day-1+ans[i].hi,maxx);
30 }
31 else
32 {
33 if(abs(ans[i].hi-ans[i-1].hi)>ans[i].day-ans[i-1].day)
34 flag = 1;
35 else
36 {
37 int l = max(ans[i-1].hi,ans[i].hi);
38 int r = 1e9;
39 while(l<=r)
40 {
41 int mid = (l+r)/2;
42 int x = abs(mid-ans[i].hi);
43 int y = abs(mid-ans[i-1].hi);//printf("%d\n",mid);
44 if(x+y<=ans[i].day-ans[i-1].day)
45 {
46 maxx = max(maxx,mid);
47 l = mid+1;
48 }
49 else r = mid-1;
50 }
51 }
52 } if(i == m-1)
53 {
54 maxx = max(maxx,n-ans[i].day+ans[i].hi);
55 }
56 }if(flag)printf("IMPOSSIBLE\n");
57 else
58 printf("%d\n",maxx);
59 }
60 return 0;
61 }

代码库

C. Tourist's Notes的更多相关文章

  1. Codeforces Round #300 C. Tourist's Notes 水题

    C. Tourist's Notes Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/538/pr ...

  2. Codeforces 538 C. Tourist's Notes

    C. Tourist's Notes   time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  3. Tourist's Notes CodeForces - 538C (贪心)

    A tourist hiked along the mountain range. The hike lasted for n days, during each day the tourist no ...

  4. C. Tourist's Notes

    题目链接 题意:n天内登山,相邻两次登山的高度差的绝对值小于等于1,也就是说每次高度变化只能是:0,1,-1.我们已经知道n天中部分天数人所在的山的高度,求最大的登山高度. 输入: n m  n 是天 ...

  5. Codeforces Round #300(A.【字符串,多方法】,B.【思维题】,C.【贪心,数学】)

    A. Cutting Banner time limit per test:2 seconds memory limit per test:256 megabytes input:standard i ...

  6. Codeforces Round #300 解题报告

    呜呜周日的时候手感一直很好 代码一般都是一遍过编译一遍过样例 做CF的时候前三题也都是一遍过Pretest没想着去检查... 期间姐姐提醒说有Announcement也自信不去看 呜呜然后就FST了 ...

  7. C. Tourist Problem

    http://codeforces.com/problemset/problem/340/C 赛时没想出赛后却能较快想出深深的教育自己做题一定要静下心来,不要轻易放弃,认真思考,不要浮躁着急,不要太容 ...

  8. codeforces 340C Tourist Problem(公式题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Tourist Problem Iahub is a big fan of tou ...

  9. Codeforces Round #198 (Div. 2) C. Tourist Problem

    C. Tourist Problem time limit per test 1 second memory limit per test 256 megabytes input standard i ...

随机推荐

  1. 43-Reverse Nodes in k-Group

    Reverse Nodes in k-Group My Submissions QuestionEditorial Solution Total Accepted: 58690 Total Submi ...

  2. 生成随机数的N种方式

    首先需要说明的是,计算机中生成的随机数严格来说都是伪随机,即非真正的随机数,真正随机数的随机样本不可重现.那么我们来看看代码中有哪些方式可以生成随机数. rand rand函数声明如下: #inclu ...

  3. 添加页面、页面交互、动态添加页面tab

    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="ViewDictTosPr ...

  4. Linux 参数代换 命令 xargs

    xargs 命令也是管道命令中的一员.xargs命令的功能简单来说就是参数代换.那么什么叫做参数代换,这里首先要了解管道的概念.在 linux管道 命令一节中我们详细介绍了管道命令的概念.这里我们只是 ...

  5. 日常Java 2021/11/13

    Java Applet基础 Applet是一种Java程序.它一般运行在支持Java的Web浏览器内.因为它有完整的Java API支持,所以Applet是一个全功能的Java应用程序.如下所示是独立 ...

  6. Learning Spark中文版--第五章--加载保存数据(1)

      开发工程师和数据科学家都会受益于本章的部分内容.工程师可能希望探索更多的输出格式,看看有没有一些适合他们下游用户的格式.数据科学家可能会更关注他们已经使用的数据格式. Motivation   我 ...

  7. GO并发相关

    锁的使用 注意要成对,重点是代码中有分支或者异常返回的情况,这种情况要在异常返回前先释放锁 mysqlInstanceLock.Lock() slaveHostSql := "show sl ...

  8. 带你了解 Angular 与 Angular JS

    Angular 是一个基于 TypeScript 的开源客户端框架,专为构建 Web 应用程序而设计. 另一方面,AngularJS 是 Angular 的第一个版本,用纯 JavaScript 编写 ...

  9. Python matplotlib绘图设置坐标轴的标题

    一.语法简介 plt.xlabel("销售月份",fontsize=16,color='red',fontweight='bold',loc='center',background ...

  10. 转: iPhone屏幕尺寸、分辨率及适配

    1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Factor 设备分辨率(pixel) PPI 3GS ...