Interval [STL、双指针、二分]

题目链接 http://acm.hpu.edu.cn/problem.php?id=1193

或者

题目链接 http://acm.nyist.net/JudgeOnline/problem.php?pid=1316

看了题解有点迷,标程很厉害,很巧妙。先求出前缀和 presum[MAXN],区间长度至少是L,所以想到的是二分法,解决。二分具体:枚举左端点,从 N-L+1 到 l>=1;右端点一开始只有presum[N];所以左端点往左,维护一个右端点的前缀和,之后二分找    (左端点前缀和+M)>=presum [mid]  ;

那么满足条件的就有  (有序数组个数 - mid) ;  维护有序需要将presum [r] 插入,我使用内存复制比较快;

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <cctype>
  4. #include <cmath>
  5. #include <set>
  6. #include <map>
  7. #include <list>
  8. #include <queue>
  9. #include <deque>
  10. #include <stack>
  11. #include <string>
  12. #include <vector>
  13. #include <iostream>
  14. #include <algorithm>
  15. #include <stdlib.h>
  16. #include <time.h>
  17.  
  18. using namespace std;
  19. typedef long long LL;
  20. const int INF=2e9+1e8;
  21. const int MOD=1e9+7;
  22. const int MAXSIZE=1e6+5;
  23. const double eps=0.0000000001;
  24. void fre()
  25. {
  26. freopen("in.txt","r",stdin);
  27. freopen("out.txt","w",stdout);
  28. }
  29. #define memst(a,b) memset(a,b,sizeof(a))
  30. #define fr(i,a,n) for(int i=a;i<n;i++)
  31.  
  32. const int MAXN=10000+10;
  33. int presum[MAXN];
  34. int bin[MAXN];
  35. int temp[MAXN];
  36. void insert(int pos,int value,int _size)
  37. {
  38. memcpy(temp,bin+pos,(_size-pos)*sizeof(int));
  39. bin[pos]=value;
  40. memcpy(bin+pos+1,temp,(_size-pos)*sizeof(int));
  41. }
  42. int main()
  43. {
  44. int t;
  45. scanf("%d", &t);
  46. while(t--)
  47. {
  48. int N, L, M;
  49. scanf("%d%d%d", &N, &L, &M);
  50. for(int i = 1; i <= N; i++)
  51. {
  52. int v;
  53. scanf("%d", &v);
  54. presum[i] = presum[i - 1] + v;
  55. }
  56. int T = N;
  57. int ans = 0;
  58. for(int l=N-L+1,len=0,r=N; l>=1; l--,r--)
  59. {
  60. int pos;
  61. pos=lower_bound(bin,bin+len, presum[r])-bin;
  62. insert(pos,presum[r],len++);
  63. pos=lower_bound(bin,bin+len,presum[l-1]+M)-bin;
  64. int temp=len-pos;
  65. ans+=temp;
  66. }
  67. printf("%d\n", ans);
  68. }
  69. return 0;
  70. }
  71.  
  72. /**************************************************/
  73. /** Copyright Notice **/
  74. /** writer: wurong **/
  75. /** school: nyist **/
  76. /** blog : http://blog.csdn.net/wr_technology **/
  77. /**************************************************/

hpuoj 1193: Interval的更多相关文章

  1. Failure to find xxx in xxx was cached in the local repository, resolution will not be reattempted until the update interval of nexus has elapsed or updates are forced @ xxx

    问题: 在linux服务器上使用maven编译war时报错: 16:41:35 [FATAL] Non-resolvable parent POM for ***: Failure to find * ...

  2. [LeetCode] Find Right Interval 找右区间

    Given a set of intervals, for each of the interval i, check if there exists an interval j whose star ...

  3. [LeetCode] Insert Interval 插入区间

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...

  4. angularjs 中的setTimeout(),setInterval() / $interval 和 $timeout

    $interval window.setInterval的Angular包装形式.Fn是每次延迟时间后被执行的函数. 间隔函数的返回值是一个承诺.这个承诺将在每个间隔刻度被通知,并且到达规定迭代次数后 ...

  5. MySQL interval()函数

    INTERVAL(N,N1,N2,N3,..........) INTERVAL()函数进行比较列表(N,N1,N2,N3等等)中的N值.该函数如果N<N1返回0,如果N<N2返回1,如果 ...

  6. oracle11g interval(numtoyminterval())自动创建表分区

    Oracle11g通过间隔分区实现按月创建表分区 在项目数据库设计过程中由于单表的数据量非常庞大,需要对表进行分区处理.由于表中的数据是历史交易,故按月分区,提升查询和管理. 由于之前对于表分区了解不 ...

  7. maven执行报错resolution will not be reattempted until the update interval of nexus h

    maven在执行过程中抛错: 引用 ... was cached in the local repository, resolution will not be reattempted until t ...

  8. Leetcode Insert Interval

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...

  9. Hdu 5489 合肥网络赛 1009 Removed Interval

    跳跃式LIS(nlogn),在普通的转移基础上增加一种可以跨越一段距离的转移,用一颗新的树状数组维护,同时,我们还要维护跨越完一次后面的转移,所以我用了3颗树状数组.. 比赛的时候一句话位置写错了,然 ...

随机推荐

  1. 【webpack2】-- 入门与解析

    每次学新东西总感觉自己是不是变笨了,看了几个博客,试着试着就跑不下去,无奈只有去看官方文档. webpack是基于node的.先安装最新的node. 1.初始化 安装node后,新建一个目录,比如ht ...

  2. docker 如何清理垃圾呢

    应用容器在宿主机上长期运行,应用实例启停容器,会产生大量的停止的容器,无容器使用的数据卷.网络配置,无容器依赖的镜像,这些垃圾日积月累,会影响到宿主机的运行状态,造成机子卡顿等现象.因此,需要对这些宿 ...

  3. Android自己定义实现循环滚轮控件WheelView

    首先呈上效果图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...

  4. CSDN站点系统升级公告

    各位尊敬的CSDN用户: 你们好. CSDN站点将于2015年12月17日23时-12月18日08时进行系统升级维护,升级维护期间,CSDN站点将会受到影响.可能会导致博客.下载频道及站点其它功能无法 ...

  5. 怎样把多个Android Project打包成一个APK

    怎样把多个Android Project打包成一个APK(你的项目怎样引用其它项目). 怎样把多个android project 打包成一个apk呢,事实上原理是这种.一个主project引用其它的p ...

  6. 【凯子哥带你夯实应用层】使用ActionProvider实现子菜单时遇到的一个坑

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 近期在重温Android基础.在看到ActionProvider的时候遇到一个坑.分享到大家,避免入坑. 首 ...

  7. codeforces 570 D. Tree Requests 树状数组+dfs搜索序

    链接:http://codeforces.com/problemset/problem/570/D D. Tree Requests time limit per test 2 seconds mem ...

  8. 【每日Scrum】第三天(4.24) TD学生助手Sprint2站立会议

    站立会议 组员 昨天 今天 困难 签到 刘铸辉 (组长) 今天主要看了多事件处理的内容然后改了下界面, 和小楠重写架构,使代码更加简洁,并增加了几个界面 架构太难,数据库字段总出问题 Y 刘静 添加事 ...

  9. start-dfs.sh 和 start-all.sh的区别

    start-dfs.sh 只启动namenode 和datanode, start-all.sh还包括yarn的resourcemanager 和nodemanager 之前就所以因为只启动了star ...

  10. FastDFS的配置、部署与API使用解读(6)FastDFS配置详解之Storage配置(转)

    1 基本配置 disabled #func:该配置文件是否生效 #valu: ## true:无效 ## false:生效 disabled=false group_name #func:本stora ...