time limit per test 1 second

memory limit per test 256 megabytes

input standard input

output standard output

You are given an array of n integer numbers. Let sum(l, r) be the sum of all numbers on positions from l to r non-inclusive (l-th element is counted, r-th element is not counted). For indices l and r holds 0 ≤ l ≤ r ≤ n. Indices in array are numbered from 0.

For example, if a = [ - 5, 3, 9, 4], then sum(0, 1) =  - 5, sum(0, 2) =  - 2, sum(1, 4) = 16 and sum(i, i) = 0 for each i from 0 to 4.

Choose the indices of three delimiters delim0, delim1, delim2 (0 ≤ delim0 ≤ delim1 ≤ delim2 ≤ n) and divide the array in such a way that the value of res = sum(0, delim0) - sum(delim0, delim1) + sum(delim1, delim2) - sum(delim2, n) is maximal.

Note that some of the expressions sum(l, r) can correspond to empty segments (if l = r for some segment).

Input

The first line contains one integer number n (1 ≤ n ≤ 5000).

The second line contains n numbers a0, a1, ..., an - 1 ( - 109 ≤ ai ≤ 109).

Output

Choose three indices so that the value of res is maximal. If there are multiple answers, print any of them.

Examples

input

3
-1 2 3

output

0 1 3

input

4
0 0 -1 0

output

0 0 0

input

1
10000

output

1 1 1
 
【翻译】给出一个长度为n的序列(1~n),现在需要选择三个点d1,d2,d2(0<=d1<=d2<=d3<=n),设ABCD分别为区间(0,d1],(d1,d2],(d2,d3],(d3,n]的内部元素和,求A-B+C-D取到最大值时d1,d2,d3的值,情况多种就随便输出一种。
 
题解:
①好像怎么弄都是O(n2),枚举d2,然后取d1,d3的最有位置更新答案。
    ②为辅助上述方法,预处理(A-B),(C-D)的最大值,并记录取最大值时候d的位置。
    ③预处理会使用到前缀和。
#include<stdio.h>
#define ll long long
#define comb (val1[i]+val2[i])
#define S(l,r) (sum[r]-sum[l-1])
#define go(i,a,b) for(int i=a;i<=b;i++)
const int N=5003;int n,p1[N],p3[N],P1,P2,P3;
ll a[N],_[N],sum[N],val1[N],val2[N],ans,t;
int main()
{
scanf("%d",&n);ans=1ll*-1e9*1e9; go(i,1,n)scanf("%I64d",a+i),sum[i]=sum[i-1]+a[i];
go(i,0,n){val1[i]=1ll*-1e9*1e9;
go(j,0,i)if((t=S(1,j)-S(j+1,i))>val1[i])p1[i]=j,val1[i]=t;}
go(i,0,n){val2[i]=1ll*-1e9*1e9;
go(j,i,n)if((t=S(i+1,j)-S(j+1,n))>val2[i])p3[i]=j,val2[i]=t;}
go(i,0,n)if(val1[i]+val2[i]>ans)ans=comb,P1=p1[i],P2=i,P3=p3[i]; printf("%d %d %d\n",P1,P2,P3);return 0;
}//Paul_Guderian
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

挥挥手倦鸟飞过丛林,隐没在碎与溃的深谷。——————汪峰《挥挥手》

【CF Edu 28 C. Four Segments】的更多相关文章

  1. 【CF Edu 28 A. Curriculum Vitae】

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  2. 【CF Edu 28 B. Math Show】

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  3. 【2020.11.28提高组模拟】T1染色(color)

    [2020.11.28提高组模拟]T1染色(color) 题目 题目描述 给定 \(n\),你现在需要给整数 \(1\) 到 \(n\) 进行染色,使得对于所有的 \(1\leq i<j\leq ...

  4. 【CF edu 30 D. Merge Sort】

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  5. 【Cf edu 30 B. Balanced Substring】

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  6. 【CF Round 434 B. Which floor?】

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  7. 【2020.11.28提高组模拟】T2 序列(array)

    序列(array) 题目描述 ​给定一个长为 \(m\) 的序列 \(a\). 有一个长为 \(m\) 的序列 \(b\),需满足 \(0\leq b_i \leq n\),\(\sum_{i=1}^ ...

  8. B. Lost Number【CF交互题 暴力】

    B. Lost Number[CF交互题 暴力] This is an interactive problem. Remember to flush your output while communi ...

  9. 【CF 453A】 A. Little Pony and Expected Maximum(期望、快速幂)

    A. Little Pony and Expected Maximum time limit per test 1 second memory limit per test 256 megabytes ...

随机推荐

  1. 【赛时总结】 ◇赛时·I◇ AtCoder ARC-098

    ◆赛时I◆ ARC-098 ■试题&解析■ ◆本场最水◆ C-Attention 长点儿信心吧-- [AtCoder ARC-098 C] [解析] 既然只存在左右(东西)两个朝向,那么领导右 ...

  2. motto - Express 4.x Request对象获得参数方法

    本文搜索关键字:motto express node js nodejs javascript request body request.body 1. req.param() 该方法获得参数最为方便 ...

  3. Windows Subsystem for Linux(WSL)安装记录

    什么是WSL Windows Subsystem for Linux(简称WSL)是一个为在Windows 10上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层.它是由微软与Canoni ...

  4. java数组之二分法查找

    认识: 猜字游戏 步数 所猜的数 结果 可能值的范围 0     1~100 1 50 太高 1~49 2 25 太低 26~49 3 37 太高 26~36 4 31 太低 32~36 5 34 太 ...

  5. zabbix运维监控平台

    zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决 ...

  6. A Country on Wheels【车轮上的国家】

    A Country on Wheels As cultural symbols go, the American  car is quite young. 作为文化象征的美国汽车还相当年轻. The ...

  7. scala Actor -03

    1.对于上一篇讲解的scala的一些补充 val files = Array[String]("a.txt","b.txt","c.txt" ...

  8. python re模块实现计算器

    def mul_div(exp): #计算乘除 while True: ret = re.search('[\d\.]+[\*\/]-?[\d\.]+', exp) if ret: atom_exp ...

  9. python面向对象的反射

    python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) getattr # 根据字符串的形式,去对象中找成员.hasattr # 根据字符 ...

  10. 15.9,python操作redis集群

      上代码 .对redis的单实例进行连接操作 python3 >>>import redis >>>r = redis.StrictRedis(host=, db ...