题目:在一个由N个整数组成的数列中,最多能找到多少个位置连续的整数且其中的最大值与最小值之差不超过K呢?

GDKOI 2003 又一道很类似的题(河床)使用的是动态规划,因为数据范围较小(复杂度为O(nk)),这里10^6*10^6肯定超时(确实TLE了);

这里使用一次扫描,加上单调队列,将复杂度降为O(n)(每个元素最多只进队一次,最多只出队一次),当然不是自己的思路……详见“CSU_BMW正式组建纪念赛”解题报告以及COJ1170(A Simple Problem)这两篇,LJ大牛的代码比较清晰;

WA无数次,TLE多次,RE两次,魔法值-50。。。

# include <stdio.h># define MAXN 1000005int n, k;
int t[MAXN];
int Q[2][MAXN], f[2], r[2];        /* Q[0]:rise, Q[1]:fall */int cmp_ll(int x, int y, int b)
{long long xx = x;long long yy = y;long long bb = b;    if (xx>=yy && xx-yy<=bb) return 1;if (xx<=yy && yy-xx<=bb) return 1;return 0;
}int main()
{int i, j, len, ans;while (~scanf("%d%d", &n, &k)){for ( i = 1; i <= n; ++i)scanf("%d", &t[i]);f[0] = r[0] = 0;f[1] = r[1] = 0;Q[0][r[0]++] = 1;Q[1][r[1]++] = 1;ans = 1;i = j = 1;while (j < n){   while (j<n && cmp_ll(t[Q[0][f[0]]], t[Q[1][f[1]]], k)){  ++j;while (r[0]>f[0] && t[Q[0][r[0]-1]] >= t[j])--r[0];Q[0][r[0]++] = j;while (r[1]>f[1] && t[Q[1][r[1]-1]] <= t[j])--r[1];Q[1][r[1]++] = j;}len = j-i;if (j == n && cmp_ll(t[Q[0][f[0]]], t[Q[1][f[1]]], k)) ++len;if (ans < len) ans = len;if (t[Q[0][f[0]]] == t[j]){while (f[1]<r[1] && !cmp_ll(t[Q[0][f[0]]], t[Q[1][f[1]]], k))++f[1];i = Q[1][f[1]-1]+1;}else if (t[Q[1][f[1]]] == t[j]){while (f[0]<r[0] && !cmp_ll(t[Q[0][f[0]]], t[Q[1][f[1]]], k))++f[0];i = Q[0][f[0]-1]+1;}}printf("%d\n", ans);}return 0;
}

转载于:https://www.cnblogs.com/JMDWQ/archive/2012/04/19/2458545.html

COJ 1170 A Simple Problem相关推荐

  1. BZOJ 4679/Hdu5331 Simple Problem LCT or 树链剖分

    4679: Hdu5331 Simple Problem 题意: 考场上,看到这道题就让我想起BZOJ4712洪水.然后思路就被带着飞起了,完全没去考虑一条链的情况,于是GG. 解法:先考虑一条链的做 ...

  2. mutiset HDOJ 5349 MZL's simple problem

    题目传送门 1 /* 2 这题可以用stl的mutiset容器方便求解,我对这东西不熟悉,TLE了几次,最后用读入外挂水过. 3 题解有O(n)的做法,还以为我是侥幸过的,后来才知道iterator ...

  3. HDU2522 A simple problem【分数与小数】

    A simple problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...

  4. SGU 111 Very simple problem 翻译 题解

    111. Very simple problem 每个测试点时间限制: 0.50 sec.  每个测试点内存限制: 4096 KB 给你一个自然数X,输出平方小于或等于X的最大整数. 输入 输入包含一 ...

  5. 【线段树】【模板】讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值)

    [线段树][模板]讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值) ...

  6. poj 3243:A Simple Problem with Integers

    3243:A Simple Problem with Integers 查看 提交 统计 提示 提问 总时间限制:  5000ms  单个测试点时间限制:  2000ms  内存限制:  131072 ...

  7. poj3468 A Simple Problem with Integers

    http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=14607 题意:题目给你n个数,m个操作,接下来一行给你这n个数,接下 ...

  8. (线段树模板)A Simple Problem with Integers --POJ--3468

    链接: http://poj.org/problem?id=3468 代码: 1 #include<stdio.h> 2 #include<algorithm> 3 #incl ...

  9. POJ3468 A Simple Problem with Integers【线段树 成段更新+求和 lazy标志】

    用longlong替换__int64也成. #define LL long long 输入输出用%lld Problem: 3468   User: qq1203456195 Memory: 4284 ...

最新文章

  1. 小用lambda函数
  2. 最短路---dijsktra--邻接矩阵
  3. 书评:Just the Computer Essentials(Vista)
  4. linux的munit命令,LinuxUnit命令学习(三)
  5. Timeline窗口详解
  6. GameObject.Find() 和 Transform.Find()的区别
  7. Objective-C之@类别小实例
  8. android 向上弹出,android 弹出Popupwindow 自适用(Activity或者Dialog)判断向上还向下...
  9. Shell编程之变量的高级用法
  10. 最近收集的中科院研究生教学视频
  11. 服务器显示ipv4问题,IPv4会出现哪些问题
  12. select函数使用细节
  13. 房贷又降,不买!还能降
  14. 世纪佳缘推智能设备 是衰退迹象 还是第二春征兆?
  15. 时间格式Python
  16. 基础篇:3.1.3)注塑件-机械紧固
  17. Android P SELinux (四) CTS neverallow处理总结
  18. 2022年宜昌助理工程师职称评审流程和条件是什么呢?甘建二
  19. 企业内部邮箱有哪些好用,怎么注册申请公司内部邮箱
  20. Delphi多线程总结

热门文章

  1. adaptiveThreshold函数
  2. 《MySQL数据技术与实验指导》jxgl数据库的创建和插入
  3. Keras实现mode.fit和model.fit_generator比较
  4. 建立随机矩阵,及生成新矩阵
  5. git push 推送大文件失败的处理办法
  6. Java基础:(五)Object通用方法
  7. C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
  8. ZOJ3469 Food Delivery 区间DP
  9. xcode5 delete provisioning profile
  10. asp.net常规页生命周期阶段列表和事件列表