1 条题解
-
1
IncDec Sequence
根据基本的差分思想,我们可以把区间操作转化为单点修改。 最终我们要的结果是:差分数组 中的 非 ,其余为 。 操作大致可以分为四类:
- ;
- ,这个会对 产生影响;
- ;
- 。这个操作显然无意义。 假设我们统计出最初的 有 个正数, 个负数,那么显然多用第一种操作更优,最多可以使用 次。剩下的只能使用操作二和三,需要 次。因而第一问的答案是 。 导致最终序列不同的因素就是操作二和三,两种加起来一共执行 次,因此第二问答案是 。
// 增减序列 #include <bits/stdc++.h> #define int long long #define SIZE 100010 #define all(x) x.begin(), x.end() #define debug(x) cout<<#x<<":"<<x<<endl; using namespace std; int d[SIZE]={0}, a[SIZE]={0}; signed main() { int n; scanf("%lld", &n); for(int i=1; i<=n; i++) scanf("%lld", d+i); for(int i=1; i<=n; i++) a[i]=d[i]-d[i-1]; int p=0, q=0; for(int i=2; i<=n; i++) { if(a[i]>0) p+=a[i]; if(a[i]<0) q-=a[i]; } printf("%lld\n%lld", max(p, q), abs(p-q)+1); return 0; }
- 1
信息
- ID
- 3043
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 6
- 已通过
- 5
- 上传者