多校第六场 1006 hdu 5358 First One(枚举)
2015-08-07 15:46
417 查看
题目链接:
[hdu 5358] (http://acm.hdu.edu.cn/showproblem.php?pid=5358)题目大意:
给出一个公式:求解即可
题目分析:
我们定义loc[i][j]为在左边界在i且设区间为sum,⌊log2(sum)⌋\lfloor log_2(sum) \rfloor的右边界。定义lentlen_t为t=⌊log2(sum)⌋t = \lfloor log_2(sum) \rfloor时候的长度
原式=∑i=1n∑t=0⌊log2S(i,n)⌋maxj=in{j|⌊log2S(i,j)⌋=t}⋅(len⋅(2j−len+1)2+i⋅len)=∑i=1n∑t=0⌊log2S(i,n)⌋loc[i][t]∗⋅(len⋅(2j−len+1)2+i⋅len)\begin{align} &= \sum_{i=1}^n \sum_{t=0}^{\lfloor log_2S(i,n) \rfloor } \max_{j=i}^n \{ j | \lfloor log_2S(i,j) \rfloor = t\} \cdot (\frac{len \cdot (2j-len+1)}{2} + i \cdot len) \\&= \sum_{i=1}^n \sum_{t=0}^{\lfloor log_2S(i,n) \rfloor } loc[i][t]*\cdot (\frac{len \cdot (2j-len+1)}{2} + i \cdot len) \end{align}
那么预处理出loc[i][j],我们就可以在O(nlogsum2)\mathcal{O}(nlog_2^{sum})的时间内解决这个问题。
预处理loc[i][j]我们采取枚举每一个j,然后扫描数组,利用前缀和递增的性质,可以通过两个指针,一个指针指向区间的头,一个指针指向区间的尾,扫描一遍获得loc[i][j]的值。复杂度O(nlogsum2)\mathcal{O}(nlog_2^{sum})
AC代码:
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #define MAX 100007 using namespace std; typedef long long LL; LL a[MAX]; LL loc[MAX][35]; int t,n; void init ( ) { a = 0; LL cmp = 2LL; for ( LL i = 0 ; i < 34 ; i++ ) { LL sum = a[0]; int r = 0; for ( int l = 0 ; l < n ; l++ ) { if (l) sum -= a[l-1]; while ( sum < cmp && r < n ) sum += a[++r]; loc[l][i] = r; } cmp <<= 1; } } void solve () { LL ans = 0; for ( LL i = 0 ; i < n ; i++ ) { LL ii = i; for ( LL j = 0 ; j < 34 ; j++ ) { LL x = loc[i][j]; LL len = x-ii; ans += ((i+1)* len + (x+1+ii)*len/2LL)*(j+1); ii = x; } } printf ( "%I64d\n" , ans ); } int main ( ) { scanf ( "%d" , &t ); while ( t-- ) { scanf ("%d" , &n ); for ( int i = 0 ; i < n ; i++ ) scanf ("%I64d" , &a[i] ); init (); solve(); } }
相关文章推荐
- Android新技术学习——阿里巴巴免Root无侵入AOP框架Dexposed
- myeclipse2014集成SVN
- gvim配置
- GCD的介绍
- HDOJ Beat (DFS)
- IE浏览器下的Input File详解
- listView的可重用机制对性能的影响
- oracle11g dataguard 完全手册
- 分治策略
- 【Jade】jade的一些使用技巧
- Java学习笔记-------使用JScrollPane 不显示滚动条的原因:
- eclipse的安卓开发插件『ADT』在线安装不成功的解决方案
- ubuntu挂载到开发板某个目录
- uva 1347
- EditText输入格式设置
- 十一. 如果没有这个4扫盲项目,不要试图在初创公司
- Android 开发环境下载连接
- DOM中的创建,插入,删除
- 避免内存泄露的一些简单方法
- CSS之font-smoothing