本题又是一题单调队列题解. 技巧就是须要计算好前n项和Sn = a1 + a2 + ... an 这样方便处理. 记录一条单调队列,其意义是: q(head), q(head+1), ...q(tail) 当中头q(head)代表当前最佳解的起点 这样我们仅仅须要在求某点为结尾的S[i] - S[q(head)就得到当前最佳值. 了解了单调数列,知道当中的记录意义,那么这道题就没有难度了. 我也是了解这些信息之后就自己敲出代码的. 只是有些细节没写好也让我WA了几次. 近期少刷水题,而一直都是每…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4123 题意: 给你一棵树,n个节点,每条边有长度. 然后有m个询问,每个询问给定一个q值. 设dis[i]为:从节点i出发,不重复经过节点,所能够走的最远距离. 每次询问问你:区间[l,r]最长能有多长,同时保证 max{dis[i]} - min{dis[i]} <= q (i∈[l,r]) 题解: 首先有一个结论: 从树上的任意一个节点出发,尽可能往远走,最终一定会到达树的直径的两个端点之一.…
HDU 4193 题意:给n个数字组成的序列(n <= 10^6).求该序列的循环同构序列中,有多少个序列的随意前i项和均大于或等于0. 思路: 这题看到数据规模认为仅仅能用最多O(nlogn)的算法.然后想到了之前刚做过的有关最小表示法的题.但还没证明出一个做这题有效的算法出来. 后来看过题解.发现用的最多的方法是单调队列,然而我对这个知识点知之甚少orz /*科普君:from单调队列 单调队列是指:队列中元素之间的关系具有单调性.并且,队首和队尾都能够进行出队操作.仅仅有队尾能够进行入队操作…
Fxx and game 问题描述   青年理论计算机科学家Fxx给的学生设计了一款数字游戏. 一开始你将会得到一个数\:XX,每次游戏将给定两个参数\:k,tk,t, 任意时刻你可以对你的数执行下面两个步骤之一: 1.\:X = X - i(1 <= i <= t)1.X=X−i(1<=i<=t). 2.\:2.若\:X\:X为\:k\:k的倍数,X = X / kX=X/k. 现在Fxx想要你告诉他最少的运行步骤,使\:X\:X变成\:11. 输入描述   第一行一个整数\:T…
题意: 给定n长的数组(下标从1-n)(n个人的身高,身高各不同样 问:对于第i个人,他能看到的左边最矮的人下标.(假设这个最矮的人被挡住了,则这个值为0) 还有右边最高的人下标,同理若被挡住了则这个值为0 输出n行,每一个人左右2边的下标. 单调队列,对于 front - rear 的队列(注意出队都是在rear,入队也是在rear) 当增加元素x,若这队列是单调递增的,显然q.front() <= x , 反之若>x ,则把队首元素弹掉,这样就能保持单调性. 若弹掉了队首元素,在此题中就相…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 158421    Accepted Submission(s): 37055 Problem Description Given a sequence a[1],a[2]…
题目大意:  值得注意的一点是题目要求的是这些子段之间的最大整数和.注意和Max Sum Plus Plus这个题目的区别. 题解: 线性区间DP,对每一段考虑取或者不取.定义状态dp[i][j]指的是前i个数分为j段. 如果第j段不选的话dp[i][j]=dp[i-1][j],直接就是上一个状态的值. 如果选得话,dp[i][j]=dp[i-part[j]][j-1]+sum[i]-sum[i-part[j]].前一共有i个数,第j段要占用i-part[j]个数,所以前j-1段要占用 i-pa…
To The Max Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 10747    Accepted Submission(s): 5149 Problem Description Given a two-dimensional array of positive and negative integers, a sub-recta…
Max Sum of Max-K-sub-sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5690    Accepted Submission(s): 2059 Problem Description Given a circle sequence A[1],A[2],A[3]......A[n]. Circle s…
题目大意:给你n个数, 让你问你最长的满足要求的区间有多长,区间要求:MAX - MIN >= m && MAX - MIN <= k 思路:单调队列维护递增和递减,在加入数值的过程中更新答案. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define pii pair<int,int> #def…