题意:给定N个数a[],现在用a形成一个新的数组b[],1<=b[i]<=a[i]。 问所有的方案的最大值之和。

思路:先排序。然后分段统计贡献,假设a[i-1]<a[i],那么[a[i-1]+1,a[i]]的贡献就是左边的所有方案*右边的合法方案,合法即是最大值这个区间内。

假设max=x,那么右边的贡献是x*(x^(n-i+1)-(x-1)*(n-i+1));  所有的x加起来,发现是个前缀和,=x^(n-i+2)+(x-1)^(n-i+1)+...^(n-i+1);最右边部分可以用拉格朗日求出。

所有就完了。 但是我的板子好像有点慢。

(毕竟我多加了一个log,明天来修改一下。今天还有几个题要补。

(实则是在准备板子。

#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
const int Mod=1e9+;
const int mod=1e9+;
int a[maxn],sum[maxn],ans;
ll f[maxn],fac[maxn],inv[maxn];
ll P(ll a,ll b)
{
ll ans=;
while(b) {
if(b&) ans=ans*a%mod;
b>>=; a=a*a%mod;
}
if(ans<) ans+=mod;
return ans;
}
void init(int tot)
{
fac[]=;
for(int i=;i<=tot;i++)
fac[i]=fac[i-]*i%mod;
inv[tot]=P(fac[tot],mod-);
inv[]=; //求阶乘逆元
for(int i=tot-;i>=;i--)
inv[i]=inv[i+]*(i+)%mod;
}
ll Lagrange(ll n,ll k)
{
rep(i,,k+) f[i]=(f[i-]+P(i,k-))%mod;
if(n<=k+) return f[n];
int tot=k+; init(tot);
ll ans=,now=;
for(int i=;i<=tot;i++) now=now*(n-i)%mod;
for(int i=;i<=tot;i++) {
ll inv1=P(n-i,mod-);
ll inv2=inv[i-]*inv[tot-i]%mod;
if((tot-i)&) inv2=mod-inv2;
ll temp=now*inv1%mod;
temp=temp*f[i]%mod*inv2%mod;
ans+=temp;
if(ans>=mod) ans-=mod;
}
return ans;
}
int solve(int x,int k)
{
if(!x) return ;
return P(x,k+)-Lagrange(x-,k+);
}
int main()
{
int N;
while(~scanf("%d",&N)){
rep(i,,N) scanf("%d",&a[i]);
sort(a+,a+N+); ans=; sum[]=;
rep(i,,N) sum[i]=1LL*sum[i-]*a[i]%Mod;
rep(i,,N) {
if(a[i]==a[i-]) continue;
int res=(solve(a[i],N-i+)-solve(a[i-],N-i+)+Mod)%Mod;
(ans+=1LL*sum[i-]*res%Mod)%=Mod;
}
printf("%d\n",ans);
}
return ;
}

最新文章

  1. MySQL5.7.11安装
  2. Golang 文件服务器小结
  3. RabbitMQ(五) -- topics
  4. 控件(弹出类): ToolTip, Popup, PopupMenu
  5. 【EM】C++代码实现
  6. git 提交代码的流程
  7. BZOJ3513: [MUTC2013]idiots
  8. 掌握 Linux 调试技术
  9. c#线程的几种启动方法
  10. JDBC的使用
  11. tcpdump 使用
  12. Codeforces Round #305 (Div. 2) A. Mike and Fax 暴力回文串
  13. IDEL中easyui使用jstl和el出现传值不显示的问题
  14. yum2
  15. Block学习总结
  16. jenkins+ant+jmeter自动化性能测试平台
  17. nginx配置location总结及rewrite规则写法(2)
  18. java 实现单向链表
  19. c++中的类(class)-----笔记(类多态)
  20. 一道区间DP的水题 -- luogu P2858 [USACO06FEB]奶牛零食Treats for the Cows

热门文章

  1. docker 学习操作记录 5-2
  2. C# 杀掉系统中的进程
  3. ES6高级技巧(三)
  4. 解决element-ui表格表头内容太长时的换行问题
  5. GIT 安装和使用
  6. 开源规则引擎 Drools 学习笔记 之 -- 1 cannot be cast to org.drools.compiler.kie.builder.impl.InternalKieModule
  7. http://www.cnblogs.com/xdp-gacl/p/4200090.html
  8. 使用SqlConnectionStringBuilder构造数据库连接字符串
  9. Static and Instance Methods in JavaScript
  10. 学校老师没重点讲的C语言