lmax

HEU 5003 Total Amount

蹲街弑〆低调 提交于 2020-03-05 00:15:46
1 /**/ /* ************************************* 2 Problem: HEU 5003 Total Amount 3 Time: 0.0070 s 4 Memory: 244 k 5 Accepted Time: 2009-03-29 17:59:04 6 Tips: 高精度计算 7 ************************************* */ 8 #include < stdio.h > 9 #include < string .h > 10 void add( char * a, char * b, char * c) 11 { 12 int lena = strlen(a); 13 int lenb = strlen(b); 14 int lmax,lmin; 15 char * pmax, * pmin; 16 if (lena < lenb) 17 { 18 pmax = b;pmin = a;lmax = lenb;lmin = lena; 19 } 20 else 21 { 22 pmax = a;pmin = b;lmax = lena;lmin = lenb; 23 } 24 char * s = new char [lmax + 2 ]; 25 int i,j,k; 26 s[ 2 ] = '

Leetcode 1031 Maximum Sum of Two Non-Overlapping Subarrays (滑动窗口)

时光毁灭记忆、已成空白 提交于 2020-02-02 13:31:00
Leetcode 1031 题目描述 Given an array A of non-negative integers, return the maximum sum of elements in two non-overlapping (contiguous) subarrays, which have lengths L and M. (For clarification, the L-length subarray could occur before or after the M-length subarray.) Formally, return the largest V for which V = (A[i] + A[i+1] + ... + A[i+L-1]) + (A[j] + A[j+1] + ... + A[j+M-1]) and either: 0 <= i < i + L - 1 < j < j + M - 1 < A.length, or 0 <= j < j + M - 1 < i < i + L - 1 < A.length. 例子 Example 1: Input: A = [0,6,5,2,2,5,1,9,4], L = 1, M = 2 Output: 20 Explanation: One choice of subarrays is [9

poj 3667 线段树成端更新区间最大连续和

浪子不回头ぞ 提交于 2020-01-24 15:22:38
题目描述: 输入包括n,m,n表示现在一共有n个相邻的房间,m表示有m条命令。 1 a 表示现在来了一个人数为a的队伍,需要一个连续的区间能够容纳这么多人,如果能够容纳,输入最靠左边的房间的号码,否则输出0。 2 a,b 表示清空[a,a+b-1]区间内所有的房子 解题思路: 线段树结构体,定义需要记录的三个值,最大左连续、最大右连续、最大连续。 由上面的图可知,我们现在要更新两端区间,此时,合并区间的最大连续房间数只有三种情况: 1、 左区间最大连续房间数 2、 右区间最大连续房间数 3、 左区间最大右连续房间数 + 右区间最大左连续房间数 只要能够维护这些值,当中的更新和询问就好办了。 代码: View Code 1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 using namespace std; 5 const int N = 50005; 6 int mmax[N<<2],lmax[N<<2],rmax[N<<2],cover[N<<2]; 7 void PushDown(int t,int m) 8 { 9 if(cover[t]!=-1) 10 { 11 cover[t<<1]=cover[t<<1|1]=cover[t]; 12 mmax[t<<1]=lmax[t<<1]=rmax[t

【字符串】四数相加

跟風遠走 提交于 2020-01-20 12:32:40
描述 给你4个自然数,请你将这四个数相加。 输入 输入数据有多组,第一行为测试数据的组数n,下面有n行,每行有4个自然数,每个数最多不超过2008位。 输出 输出4个数相加的结果。 样例输入 2 0 1 2 3 1000000 1000000 1000000 1000000 样例输出 6 4000000 题目来源 TZOJ 分析: 复习一下大数相加,一次WA的原因是数据未初始化。 代码: #include<bits/stdc++.h> using namespace std; int main() { int T; cin>>T; string a,b,c,d; while(T–) { cin>>a>>b>>c>>d; int la=a.length(),lb=b.length(),lc=c.length(),ld=d.length(); int A[2009]={0},B[2009]={0},C[2009]={0},D[2009]={0},S[2011]={0}; for (int i=0;i<la;i++) { A[i]=a[la-i-1]-‘0’; } for (int i=0;i<lb;i++) { B[i]=b[lb-i-1]-‘0’; } for (int i=0;i<lc;i++) { C[i]=c[lc-i-1]-‘0’; } for (int i=0;i<ld;i

Using disruptor in the Java Servlet and handling multiple events [closed]

牧云@^-^@ 提交于 2020-01-05 09:13:11
问题 Closed . This question is opinion-based. It is not currently accepting answers. Want to improve this question? Update the question so it can be answered with facts and citations by editing this post. Closed 2 years ago . I am using the LMAX disruptor in my web application which takes the http request parameters and handle them to the ringbuffer. 3 event-handlers handle and process data, the final one, saves it to the database. Initialize the ringbuffer once, when the servlet is instantiated.

poj 3667 线段树成端更新区间最大连续和

我们两清 提交于 2020-01-05 03:11:58
题目描述: 输入包括n,m,n表示现在一共有n个相邻的房间,m表示有m条命令。 1 a 表示现在来了一个人数为a的队伍,需要一个连续的区间能够容纳这么多人,如果能够容纳,输入最靠左边的房间的号码,否则输出0。 2 a,b 表示清空[a,a+b-1]区间内所有的房子 解题思路: 线段树结构体,定义需要记录的三个值,最大左连续、最大右连续、最大连续。 由上面的图可知,我们现在要更新两端区间,此时,合并区间的最大连续房间数只有三种情况: 1、 左区间最大连续房间数 2、 右区间最大连续房间数 3、 左区间最大右连续房间数 + 右区间最大左连续房间数 只要能够维护这些值,当中的更新和询问就好办了。 代码: View Code 1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 using namespace std; 5 const int N = 50005; 6 int mmax[N<<2],lmax[N<<2],rmax[N<<2],cover[N<<2]; 7 void PushDown(int t,int m) 8 { 9 if(cover[t]!=-1) 10 { 11 cover[t<<1]=cover[t<<1|1]=cover[t]; 12 mmax[t<<1]=lmax[t<<1]=rmax[t

Luogu 2839 [国家集训队]middle

孤街醉人 提交于 2020-01-02 12:08:44
感觉这题挺好的。 首先对于中位数最大有一个很经典的处理方法就是二分,每次二分一个数组中的下标$mid$,然后我们把$mid$代回到原来的数组中检查,如果一个数$a_{i} \geq mid$,那么就把$s_{i}$记为$1$,否则把$s_{i}$记为$-1$,然后对$s_{i}$跑一遍前缀和,观察是否有一个区间的和不小于$0$。 读清楚题意之后发现在这题中,如果要对一个长度为偶数(记为$n$)的序列求中位数,那么答案为排好序的数组中下标为$n / 2 + 1$的元素。(下标从$1$开始),不同的中位数$s_{i}$的表示方法可能有少许不同,要具体题目具体yy。 证明应当也很简单,$+1$代表一个比当前的$mid$大的数,而$-1$表示一个比当前的$a_{mid}$小的数,那么当$a_{mid}$是中位数的条件在一个区间成立的时候,这个区间的$s_{i}$和应当恰好等于$0$。而当得到了一个区间和大于$0$的区间的时候,我们可以通过扔掉几个$1$使它变成$0$,相当于之前的条件成立。 但是这样还是太慢了。 对于本题来说,每次二分得到了一个$mid$,我们检验的时候得到的答案就一定是(区间是$a, b, c, d$)$sum(b + 1, c - 1) + lmax(c, d) + rmax(a, b)$。 其中$lmax$代表一定要选左端点的最大子段和,而$rmax

Loop through files in a folder using VBA?

匿名 (未验证) 提交于 2019-12-03 01:29:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I would like to loop through the files of a directory using vba in Excel 2010. In the loop, I will need the filename, and the date at which the file was formatted. I have coded the following which works fine if the folder has no more then 50 files, otherwise it is ridiculously slow (I need it to work with folders with >10000 files). The sole problem of this code is that the operation to look up file.name takes extremely much time. Code that works but is waaaaaay too slow (15 seconds per 100 files): Sub LoopThroughFiles() Dim MyObj As Object,

[BZOJ2329]/[BZOJ2209]-括号修复-Splay维护信息

匿名 (未验证) 提交于 2019-12-03 00:19:01
好久没码过…已经码不动了 BZOJ2329传送门 BZOJ2209传送门 看题可戳传送门,2209是2329的简化版(虽然它们都是省选题) 这个题的难点在于 取反操作 和 翻转操作 的维护 取反操作 和 翻转操作 并不能像普通信息一样直接打tag,因为是不可以直接翻转的,举个例子: ( ( ( ( ) ) 反转变成了 ) ) ) ) ( ( ,如果直接取反显然GG,翻转也类似 原因是,我们在统计贡献的时候,实际采取的策略是:「从左到右,靠左多余右括号不可抵消」。即 ( ( ) ) 这样是可以抵消的,而反转之后的 ) ) ( ( 不行。这导致我们不能直接 反/翻转 但是我们可以发现,反转后的策略, 对于原序列的策略是 :「从左到右,靠左多余左括号不可抵消」。也就是说,反转之后的答案应该这样维护:原序列如果是 ) ) ( ( 则可以抵消的而 ( ( ) ) 不行。(翻转类似,翻转=反转再交换儿子,所以翻转和反转的策略一样) 那么我们需要维护一些东西,使得在策略发生改变之后,仍然可以得出答案 那么显然的方法就是,两种策略都维护 所以我们只需维护,左边最多连续左括号/右括号,右边最多连续左括号/右括号 即可 注意 反转 和 翻转 以及 覆盖 时的标记细节 然后这题就做完了 me采用的是 左括号-1,右括号+1,统计 lmin/lmax,rmin/rmax 的方式 本质和上面是一样的

范式哈夫曼编码的快速解码技术

匿名 (未验证) 提交于 2019-12-03 00:02:01
转载自: http://blog.csdn.net/goncely/article/details/619725 1 引言 对前缀编码进行解码时,最重要的问题是如何快速的确定码字的长度。范式哈夫曼编码具有数字序列属性,因而能通过如下算法确定码字的长度: int len = 1; int code = bs.ReadBit(); while(code >= first[len]) { code <<= 1; code |= (bs.ReadBit()); // append next input bit to code len++; } len--; 另一方面,上述算法逐位进行操作,因而效率不高。快速解码算法的开发便是针对上述两个速度瓶颈而进行的。 1 一个小的改进[1] 首先看一个定理: 对于任意的两个规范哈夫曼码字w1, w2, 其码长分别为l1, l2.如果l1<l2, 那么 I(w1 1^(lmax-l1)) < I(w2 0^(lmax-l2)). 其中lmax为码字的最大长度,1^(lmax-l1)表示lmax-l1个1, w1 1^(lmax-l1)表示w1的二进制序列后面跟lmax-l1个1.w2 0^(lmax-l2)类似. I(w1 1^(lmax-l1))表示二进制序列w1 1^(lmax-l1)的整数值(无符号)。 证明:定义minword[i