C. Functions again-最长连续子序列
2017-04-08 23:22
218 查看
第一道连续子序列的题。。
给定一个数组,设定一种函数,
可以在一个 区间r,l内,对这个区间内所有该数组中的数的差值进行,加减加减操作。累加。
问最大的。由于开始r不同,所以可能是 减加减加。两种情况
求最长连续子序列
给定一个数组,设定一种函数,
可以在一个 区间r,l内,对这个区间内所有该数组中的数的差值进行,加减加减操作。累加。
问最大的。由于开始r不同,所以可能是 减加减加。两种情况
求最长连续子序列
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; //typedef long long ll; const int maxn=100005; int main() { long long a[maxn]; long long sum[maxn]; long long sum1[maxn]; long long sum2[maxn]; int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%lld",&a[i]); } int j=1; for(int i=2;i<=n;i++) { sum[j++]=abs(a[i]-a[i-1]); } //for(int i=1;i<=n-1;i++) //printf(" %d ",sum[i]); for(int i=1;i<=n-1;i++) { if(i%2) {sum1[i]=sum[i]; sum2[i]=-sum[i]; } else {sum1[i]=-sum[i]; sum2[i]=sum[i]; } } n--; long long all=0; long long maxsize=-0x3f3f3f3f; for(int i=1;i<=n;i++) { if(all+sum2[i]<sum2[i]) all=sum2[i]; else all+=sum2[i]; if(maxsize<all) maxsize=all; } all=0; for(int i=1;i<=n;i++) { if(all+sum1[i]<sum1[i]) all=sum1[i]; else all+=sum1[i]; if(maxsize<all) maxsize=all; } printf("%lld\n",maxsize); return 0; }
相关文章推荐
- 矩阵中最长连续递增子序列
- LCS(最长连续子序列+最长连续字串)
- 用二分法寻找最长连续单调递增子序列
- uva507 - Jill Rides Again(最长连续和)
- 【EPI-6.6】最长连续递增子序列-启发式搜索
- 最长连续递增子序列
- HDU 3308 线段树单点更新+区间查找最长连续子序列
- Codeforces Round #335 (Div. 2) C. Sorting Railway Cars 最长连续上升子序列
- 最长连续递增子序列
- 最长连续上升子序列
- hdu3308 LCIS--区间更新 & 最长连续上升子序列
- 最长连续子序列和
- 动态规划——最长连续子序列和+最大子矩阵和
- 最长连续递增子序列
- 最长连续递增子序列
- uva507 - Jill Rides Again(最长连续和)
- 3. Longest Substring Without Repeating Characters(求最长的不重复的连续的子序列。)
- HDU 3308 LCIS(最长连续上升子序列)
- POJ2479(最长连续子序列和)
- Codeforces Round #335 (Div. 2) C. Sorting Railway Cars 最长连续上升子序列