zoukankan      html  css  js  c++  java
  • 最大和分治+在线更新+记录位置

    #include<iostream>
    using namespace std;
    int a[1000000];
    int max3(int a, int b, int c)
    {
    	if (a > b)
    	{
    		if (a > c)
    			return a;
    		else
    			return c;
    	}
    	else
    	{
    		if (b > c)
    			return b;
    		else
    			return c;
    	}
    }
    int fenzhi(int a[], int left, int right)
    {
    	int Maxleft, Maxright;
    	int leftc = 0, rightc = 0;
    	int Maxleftc = 0, Maxrightc = 0;
    	if (left == right)
    	{
    		if (a[left] > 0) return a[left];
    		else return 0;
    	}
    	int center = (left + right) / 2;
    	Maxleft = fenzhi(a, left, center);
    	Maxright = fenzhi(a, center + 1, right);
    
    	for (int i = center; i >= left; i--)
    	{
    		leftc += a[i];
    		if (leftc > Maxleftc)
    			Maxleftc = leftc;
    	}
    	for (int i = center + 1; i <= right; i++)
    	{
    		rightc += a[i];
    		if (rightc > Maxrightc)
    			Maxrightc = rightc;
    	}
    	return max3(Maxleft, Maxright, Maxrightc + Maxleftc);
    }
    int MaxSubseqSum3(int a[], int N) {
    	return fenzhi(a, 0, N - 1);
    }
    int main()
    {
    	int n;
    	cin >> n;
    	for (int i = 0; i < n; i++)
    	{
    		cin >> a[i];
    	}
    	cout << MaxSubseqSum3(a, n) << endl;
    }
    
    
    
    #include<iostream>
    using namespace std;
    int a[1000000];
    int main()
    {
    	int n; cin >> n;
    	for (int i = 0; i < n; i++)
    	{
    		cin >> a[i];
    	}
    	int sum = 0, temp = 0;
    	for (int i = 0; i < n; i++)
    	{
    		temp += a[i];
    		if (temp > sum)
    			sum = temp;
    		if (temp < 0)
    			temp = 0;
    	}
    	cout << sum << endl;
    }
    
    
    #include<iostream>
    #include<vector>
    using namespace std;
    int main()
    {
    	int n; cin >> n; vector<int>v(n);
    	for (int i = 0; i < n; i++)
    	{
    		cin >> v[i];
    	}
    	int sum=0, start=0, left=0,right=0, ans = -1, flag = 1;
    	for (int i = 0; i < n; i++)
    	{
    		sum += v[i];
    		if (sum < 0)
    		{
    			sum = 0;
    			start = i + 1;
    		}
    		else if (sum > ans)
    		{
    			ans = sum;
    			left = start;
    			right = i;
    		}
    
    	}
    	if (ans< 0) {
    		printf("0 %d %d", v[0], v[n - 1]);
    	}
    	else {
    		printf("%d %d %d", ans, v[left], v[right]);
    	}
    }
    
  • 相关阅读:
    简单编码解码学习
    如何把SQLServer数据库从高版本降级到低版本?
    快速读取csv平面文件,并导入数据库,简单小工具
    数据流处理数据
    配置文件的几种读取方式
    常用webservice接口地址
    路径转换
    Tornado与JS交互工作
    测试技术发展之我见
    移动测试人员的未来:测试开发技术的融合
  • 原文地址:https://www.cnblogs.com/Hsiung123/p/13811920.html
Copyright © 2011-2022 走看看