51nod1081 子段求和】的更多相关文章

给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和. 例如,1 3 7 9 -1,查询第2个元素开始长度为3的子段和,1 {3 7 9} -1.3 + 7 + 9 = 19,输出19. Input 第1行:一个数N,N为数组的长度(2 <= N <= 50000). 第2 至 N + 1行:数组的N个元素.(-10^9 <= N[i] <= 10^9) 第N + 2行:1个数Q,Q为查询的数量. 第N + 3 至 N + Q + 2行:每行2个数,…
题目链接:子段求和 题意:n个数字序列,m次询问,每次询问从第p个开始L长度序列的子段和为多少. 题解:线段树区间求和 | 树状数组区间求和 线段树: #include <cstdio> #define LC(a) ((a<<1)) #define RC(a) ((a<<1)+1) #define MID(a,b) ((a+b)>>1) using namespace std; typedef long long ll; ; ll ans=; struct…
1081 子段求和   给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和.   例如,1 3 7 9 -1,查询第2个元素开始长度为3的子段和,1 {3 7 9} -1.3 + 7 + 9 = 19,输出19. Input 第1行:一个数N,N为数组的长度(2 <= N <= 50000). 第2 至 N + 1行:数组的N个元素.(-10^9 <= N[i] <= 10^9) 第N + 2行:1个数Q,Q为查询的数量. 第N + 3 至 N +…
1081 子段求和  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和. 例如,1 3 7 9 -1,查询第2个元素开始长度为3的子段和,1 {3 7 9} -1.3 + 7 + 9 = 19,输出19. Input 第1行:一个数N,N为数组的长度(2 <= N <= 50000). 第2 至 N + 1行:数组的N个元素.(-10^9 <= N[i] &l…
给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和.   例如,1 3 7 9 -1,查询第2个元素开始长度为3的子段和,1 {3 7 9} -1.3 + 7 + 9 = 19,输出19. Input 第1行:一个数N,N为数组的长度(2 <= N <= 50000). 第2 至 N + 1行:数组的N个元素.(-10^9 <= N[i] <= 10^9) 第N + 2行:1个数Q,Q为查询的数量. 第N + 3 至 N + Q + 2行:每行2个…
[算法]树状数组(区间和) [题解]记得开long long #include<cstdio> #include<cstring> #include<algorithm> #define lowbit(x) (x&(-x)) using namespace std; ; int n,m; long long a[maxn]; void give(int x,int k) { for(int i=x;i<=n;i+=lowbit(i)) { a[i]+=1l…
To the Max Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 44765   Accepted: 23700 Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1*1 or greater located wi…
买卖股票的最佳时机 II 假设有一个数组,它的第i个元素是一个给定的股票在第i天的价格.设计一个算法来找到最大的利润.你可以完成尽可能多的交易(多次买卖股票).然而,你不能同时参与多个交易(你必须在再次购买前出售股票). 给出一个数组样例[2,1,2,0,1], 返回 2 解题 参考买卖股票的最佳时机I ,求出相邻两天的股票差值,当差值大于0的时候,完成一次交易.当连续一段的交易,可以理解为:该连续交易的起始是购买,连续交易的结束时卖出.这样求出的就是一个子段的最大值.对所有的子段求和就是答案了…
以这题为例 Solution 我们首先用前缀和差分,可以认为G是1,R是-1,然后求一个前缀和qzh. 如果 qzh[i]==qzh[j] 那么 i~j 这一整段,一定是一个和为0的区间,即红绿相等的稳定区间. 那么我们维护一个 num 数组,其中 num[i] 代表前缀和为 i 时的最小出现位置,即 num[i]=min{j} (qzh[j]=i) 因为有负数,所以要统一加 len 没了. 这做法好神奇=.= // By YoungNeal #include<cstdio> #include…
题意: 给一个序列,求至少含一个元素的最大子段和? 思路: 跟求普通的最大子段和差不多,只不过需要注意一下顺序.由于至少需要一个元素,所以先将ans=nums[0].接下来可以用sum求和了,如果小于0就重置为0,表示重新开始累加.注意代码中两个if的顺序不可以呼唤. class Solution { public: int maxSubArray(vector<int>& nums) { , ans=nums[]; ; i<nums.size(); i++) { sum+=nu…
1.最大子段和问题      问题定义:对于给定序列a1,a2,a3……an,寻找它的某个连续子段,使得其和最大.如( -2,11,-4,13,-5,-2 )最大子段是{ 11,-4,13 }其和为20. (1)枚举法求解 枚举法思路如下: 以a[0]开始: {a[0]}, {a[0],a[1]},{a[0],a[1],a[2]}……{a[0],a[1],……a[n]}共n个 以a[1]开始: {a[1]}, {a[1],a[2]},{a[1],a[2],a[3]}……{a[1],a[2],………
题意:给定一个数列.求出数列中不相交的两个子段和,要求和最大 解题思路:对每一个i来说,求出[0-i-1]的最大子段和以及[i-n-1]的最大子段和,再加起来,求出最大的一个.[0-i-1]的最大子段和从左到右扫描.[i-n-1]从右到左扫描 #include<cstdio> #include<algorithm> using namespace std; ; const int INF = 0x3ffffff; ]; ],right[MAXN + ]; int main() {…
http://blog.csdn.net/liufeng_king/article/details/8632430 1.最大子段和问题      问题定义:对于给定序列a1,a2,a3……an,寻找它的某个连续子段,使得其和最大.如( -2,11,-4,13,-5,-2 )最大子段是{ 11,-4,13 }其和为20. (1)枚举法求解 枚举法思路如下: 以a[0]开始: {a[0]}, {a[0],a[1]},{a[0],a[1],a[2]}……{a[0],a[1],……a[n]}共n个 以a…
因为要讲座,随便写一下,等讲完有时间好好写一篇splay的博客. 先直接上题目然后贴代码,具体讲解都写代码里了. 参考的博客等的链接都贴代码里了,有空再好好写. P2042 [NOI2005]维护数列 题目描述 请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格) 输入输出格式 输入格式: 输入文件的第 1 行包含两个数 N 和 M,N 表示初始时数列中数的个数,M 表示要进行的操作数目. 第 2 行包含 N 个数字,描述初始时的…
最大子段和问题 给出一个整数数组a(正负数都有),如何找出一个连续子数组(可以一个都不取,那么结果为0),使得其中的和最大?   例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13.和为20.     看见这个问题你的第一反应是用什么算法? (1) 枚举?对,枚举是万能的!枚举什么?子数组的位置!好枚举一个开头位置i,一个结尾位置j>=i,再求a[i..j]之间所有数的和,找出最大的就可以啦.好的,时间复杂度? (1.1)枚举i,O(n)(1.2)枚举j,O(n)(1.3…
To the MaxTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 52281 Accepted: 27633Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1*1 or greater located within th…
[题目]: 一个M*N的矩阵,找到此矩阵的一个子矩阵,并且这个子矩阵的元素的和是最大的,输出这个最大的值. 例如:*3的矩阵: - - - - 和最大的子矩阵是: - - Input 第1行:M和N,中间用空格隔开( <= M,N <= ). 第2 - N + 1行:矩阵中的元素,每行M个数,中间用空格隔开.(-^ <= M[i] <= ^) Output 输出和的最大值.如果所有数都是负数,就输出0. Input示例 - - - - Output示例 [分析]: 在做这道题之前必…
给出一个整数数组a(正负数都有),如何找出一个连续子数组(可以一个都不取,那么结果为0),使得其中的和最大?   例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13.和为20.     看见这个问题你的第一反应是用什么算法? (1) 枚举?对,枚举是万能的!枚举什么?子数组的位置!好枚举一个开头位置i,一个结尾位置j>=i,再求a[i..j]之间所有数的和,找出最大的就可以啦.好的,时间复杂度? (1.1)枚举i,O(n)(1.2)枚举j,O(n)(1.3)求和a[i..…
N个整数组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续子段和的最大值.当所给的整数均为负数时和为0. 例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13.和为20. Input 第1行:整数序列的长度N(2 <= N <= 50000) 第2 - N + 1行:N个整数(-10^9 <= A[i] <= 10^9) Output 输出最大子段和. Input示例 6 -2 11 -4 13 -5 -…
C:子段乘积 考察点 : 线段树,尺取,乘法逆元 坑点 : 区间要做到不重不漏, long long 侃侃 : 这道题在比赛是写的尺取,但是写了半天发现不好处理除 0 问题(浮点错误),需要用到乘法逆元(就是把除法转换成乘法的 的过程,应该是用到费马小定理),由于这块不太会,就不会搞了.之后看到题解说用线段树才反应过来,确实呀,这明显就是 区间问题,而且线段树的时间复杂度是 logN,完全可以呀,而且也不用处理除 0 问题(因为我们区间里面每个元素都是 乘) 哈哈,还是自己运用的知识不够灵活吧,…
思路:贪心.累加求和,若和小于0则设置和为0,因为和小于0时对这段序列和无正作用,只会使整体变小,所以我们把小于0的段舍弃,从下一个数开始求序列和. 题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 第一行是一个正整数NN,表示了序列的长度. 第二行包含NN个绝对值不大于1000010000的整数A_iAi​,描述了这段序列. 输出格式: 一个整数,为最大的子段和是多少.子段的最小长度为11. 输入输出样例 输入样例#1: 复制 7 2 -4 3 -1…
一.设计思想:由于命令行接收的是字符串类型,因此应先将字符串类型转化为整型或其他字符型,然后利用for循环求和并输出结果 二.程序流程图: 三.源程序代码:   //王荣荣 2016/9/23      package demo;     public class CommandParameter {     public static void main(String[] args) {             // TODO Auto-generated method stub      …
// 最大子段和.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using namespace std; int MaxSum_test(int v[], int l, int r) {  int k,sum = 0;  if (l ==r)  {    return v[l] >= 0 ? v[l]:0;  }  else  {   int center = (l+ r) / 2;  …
方法一: package com.smbea.demo; public class Student { private int sum = 0; /** * 递归求和 * @param num */ public void sum(int num) { this.sum += num--; if(0 < num){ sum(num); } else { System.out.println("sum = " + sum); } } } 方法二: package com.smbea…
如A1=3779.3759.3769.3781.3750,A2对A1中4个数字求和怎么求!请高手赐教! 方法一:在B1中输入公式=SUM(MID(A1,{1,6,11,16,21},4)*1) 方法二:定义一个名称,比如"求和",输入=EVALUATE(SUBSTITUTE(Sheet1!$A2,".","+"))后确定,在B1中输入=求和,即得到你要的结果.方法二通用性更强些. 方法三:用VBA求解.进入VBE编辑环境,插入模块,输入代码:Fu…
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运用的时候,需要更新或查找的区间是储存在y1,y2变量里面的,值是储存在变量v里面的,查询结果储存在变量_sum里面. 每次更新(调用update函数)时,必须要维护更新区间上层的线段树,即更新节点上面的线段树表示的和是准确的和. 在update函数更新的时候,如果线段树分成区间包含于所要求的区间那么…
sum()求和是一个非常简单的函数,以前我的写法是这样,我想大部分和我一样刚开始学习JS的同学写出来的也会是这样. function sum() { var total=null; for(var i=0;i<arguments.length;i++){ var cur=Number(arguments[i]); if (!isNaN(cur)){ total+=cur; } } return total; } 看到下面这行,我发现自己的路还有很长很长-- function sum() { re…
//给定N个整数序列{A1,A2,A3...An},求函数f(i,j)=(k=i~j)Ak的求和 # include<stdio.h> void main() { ,sum1; ]={,-,,,,,-,,,-};//数组要定义的时候直接全部赋值 //int a[10];!!!!! // a[10]={1,-2,3,4,5,6, //给定N个整数序列{A1,A2,A3...An},求函数f(i,j)=(k=i~j)Ak的求和 # include<stdio.h> void main(…
我们在使用Ajax向服务器发送数据时,可以采用Get方式请求服务器,也可以使用Post方式请求服务器,那么什么时候该采用Get方式,什么时候该采用Post方式呢? Get请求和Post请求的区别: 1.使用Get请求时,请求所带的参数会跟在URL后传递,而Post请求则是作为HTTP消息的实体内容发送给WEB服务器. 2.使用Get请求发送数据量小,通常不能大于2KB:而Post请求发送数据量大,理论上不受限制. 3.Get方式请求的数据会被浏览器缓存起来,可从浏览器的历史记录中读取到这些数据,…
题目链接 线段树区间求和问题,维护一个最大值一个最小值即可,线段树要用C++交才能过. 注意这道题不是求三个数的最大值最小值,是求k个的. 本题数据量较大,不能用N建树,用n建树. 还有一种做法是单调队列,耗时更少. #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #define N 1000005 usi…