题意略。

思路:这个题目最重要的是那个不等式 a[i] <= a[i+1] <= 2 * a[i]  ,你会发现0 <= a[i+1]  -  a[i] <= a[i],令x = a[i+1] - a[i],那么对于a[i-1]来说,

当x = 0时,abs(x - a[i-1])== a[i - 1];当x = a[i]时,abs(x - a[i - 1])== a[i - 1]。也就是说,abs(x - a[i - 1]) <= a[i - 1]。

从n到1来遍历,我们总是令x = abs(x - a[i - 1]),到最后,0 <= abs(x - a[1]) <= a[1]也就自然满足了。

当x >= a[i - 1]时,我们应该在a[i - 1]前加 '-';反之,我们应该在x前加 '-'。

这个加'-'的过程,我开始是用树状数组区间修改点查询做的,后来发现TLE。由于加 '-' 是对后面整体和个体加的,我们可以开两个数组,一个记录单点,

一个记录整体,到时候遍历就可以达到O(n)的复杂度了。

详见代码:

#include<bits/stdc++.h>
#define maxn 100050
using namespace std;
typedef long long LL; LL a[maxn];
int mark[maxn],t[maxn],n; int main(){
scanf("%d",&n);
for(int i = ;i <= n;++i) scanf("%lld",&a[i]);
LL x = a[n] - a[n - ];
mark[n - ] = -;
for(int i = n - ;i >= ;--i){
if(x < a[i]){
x = a[i] - x;
t[i + ] = ;
}
else{
x -= a[i];
mark[i] = -;
}
}
int sum = ;
for(int i = ;i <= n;++i){
int temp;
sum += t[i];
temp = sum + mark[i];
if(temp < ) temp = ;
printf("%c",(temp & ) ? '-' : '+');
}
printf("\n");
return ;
}

最新文章

  1. POJ2104 K-th Number(归并树)
  2. git revert和git reset的区别
  3. RAM,SRAM,DRAM,SDRAM,DDR RAM,ROM,PROM,EPROM,EEPROM,NAND FLASH,NOR FLASH的区别
  4. 把sql server 2000的用户表的所有者改成dbo
  5. [React Native] Complete the Notes view
  6. oc学习之路----APNS消息推送从证书到代码(2015年4月26号亲试可用)
  7. FastCgi与PHP-fpm关系[转] 读完本文瞬间明朗了很多
  8. html5视频小站
  9. C++ builder 中AnsiString的字符串转换方法大全
  10. [补档]暑假集训D8总结
  11. chrome浏览器下JavaScript实现clipboard时无法访问剪切板解决方案
  12. shunting-yard 调度场算法、中缀表达式转逆波兰表达式
  13. Could not get JDBC Connection--java
  14. [Oracle][DATAGUARD] LOGICAL STANDBY环境里,有些SEQUENCE无法应用,导致Primary和Standby无法同期
  15. fiddler抓取https请求
  16. 六、activiti工作流-流程定义查询
  17. 朱晔的互联网架构实践心得S1E4:简单好用的监控六兄弟
  18. javaScript系列 [05]-javaScript和JSON
  19. MonkeyRunner_模拟机_运行脚本
  20. legend2---开发日志2(注释和函数比较好的写法)

热门文章

  1. 【转】globk中的卫星轨道约束
  2. curl与grep的使用
  3. iOS导出ipa包时四个选项的意义
  4. Jmeter性能测试,新手上路篇
  5. Python学习笔记(一):列表和元组
  6. 节点操作,节点属性的操作及DOM event事件
  7. JasperReport报表开发(一)--原理介绍
  8. mybatis-generator 根据表生成对应文件
  9. 不要用for循环去遍历LinkedList
  10. bzoj 4822: [Cqoi2017]老C的任务