博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uvalive2678Subsequence
阅读量:4883 次
发布时间:2019-06-11

本文共 735 字,大约阅读时间需要 2 分钟。

题意:有n个正整数组成一个序列,给定整数S,求长度最短的连续序列,使得他们的和大于等于S

分析:设输入的序列为A[i], i=1..n, 构造前缀数组B[j], j=1..n, B[j]=B[j-1]+A[j], 规定B[0]=0, 当B[j]-B[i-1]>=s的时候i增加,直至B[j]-B[i]<s, 然后更新最短的满足条件的序列的长度j-i+1,复杂度为O(n)

代码:

View Code
1 #include 
2 #include
3 using namespace std; 4 #define DEBUG 5 const int MAXN = 100000 + 10; 6 int a[MAXN]; 7 int b[MAXN]; 8 int min(int a, int b){ 9 return a
b[j]-s) continue;28 while(b[i]<=b[j]-s) i++;29 ans = min(ans, j-i+1);30 }31 if(ans==n+1) ans=0;32 printf("%d\n", ans);33 }34 return 0;35 }

如果暴力,O(n3)显然不行;如果用upper_bound则为O(n*log(n))

转载于:https://www.cnblogs.com/zjutzz/archive/2013/02/11/2910056.html

你可能感兴趣的文章
bzoj 4475: [Jsoi2015]子集选取
查看>>
团队开发7
查看>>
java之静态代理与动态代理
查看>>
软件测试2019:第四次作业
查看>>
201571030335 + 小学四则运算练习软件项目报告
查看>>
不用代码就能实现get与post
查看>>
gdb基本调试命令
查看>>
互联网开放平台API安全设计
查看>>
OPMN
查看>>
LOG收集系统(一):原日志至收集
查看>>
【文摘】经营十二条
查看>>
清除浮动的方法
查看>>
Logstash连接Elasticsearch异常
查看>>
洛谷P4287 [SHOI2011]双倍回文(回文自动机)
查看>>
用户交互程序,格式化输出
查看>>
GNOME的发展与对比
查看>>
SPOJ PT07X Vertex Cover
查看>>
$ python-json模块的基本用法
查看>>
5.6.3.4 trim()方法
查看>>
Cookie、Session和自定义分页
查看>>