码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj5055

时间:2017-09-30 00:21:40      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:class   limit   tree   include   严格   rip   desc   fine   center   

膜法师

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 112  Solved: 59
[Submit][Status][Discuss]

Description

在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度,
现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒,
显然,他能为长者所续的时间,为这三个维度上能量的乘积,
但目前的宇宙很不乐观,胡乱偷取可能造成维度的崩溃,
所以,他必须按逆序偷取这些维度,且在偷取中,
每次偷取的维度的能量必须严格小于他上次偷取的能量,
由于膜法师生活在多元宇宙,所以他可以让所有可能的偷取方案全部发生
题目描述
但他数学不好,所以找到了你帮他求出能为长者续几秒,
你要做的,就是在给定的维度序列a中,
求出所有满足i<j<k且ai<aj<ak的ai*aj*ak的和
即 ∑ (a_i*a_j*a_k),要求  i<j<k  且 a_i<a_j<a_k
 

 

Input

第一行1个数 n
第二行n个数 a_i
 

 

Output

一个数,表示能为长者续几秒,由于长者是不朽的,
所以能活很久,不妨将答案对**19260817**取模吧
 

 

Sample Input

样例1
4
1 2 3 4

样例二
10
6 8 4 1 3 0 7 5 9 2
很简单预处理+树状数组即可
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
#define lowbit(x) x&(-x)
#define maxn 300010
#define pp 19260817
#define ll long long
ll tree[maxn],tree2[maxn],a[maxn],n;
long long ans;
vector<ll> b;
void update(ll u,ll c)
{
    for(ll i=u;i<=n;tree[i]+=c,tree[i]%=pp,i+=lowbit(i));
}
void update2(ll u,ll c)
{
    for(ll i=u;i<=n;tree2[i]+=c,tree2[i]%=pp,i+=lowbit(i));
}
ll query(ll u)
{
    ll sum=0;
    for(ll i=u;i>0;sum+=tree[i],sum%=pp,i-=lowbit(i));
    return sum;
}
ll query2(ll u)
{
    ll sum=0;
    for(ll i=u;i>0;sum+=tree2[i],sum%=pp,i-=lowbit(i));
    return sum;
}
int main()
{
    scanf("%lld",&n);
    for(ll i=1;i<=n;i++)
    {
        scanf("%lld",&a[i]);
        a[i]%=pp;
        b.push_back(a[i]); 
    }
    sort(b.begin(),b.end());
    b.erase(unique(b.begin(),b.end()),b.end());
    for(ll i=1;i<=n;i++)
    a[i]=lower_bound(b.begin(),b.end(),a[i])-b.begin()+1;
    update(a[1],b[a[1]-1]);
    update(a[2],b[a[2]-1]);
    if(a[1]<a[2])
    update2(a[2],b[a[1]-1]*b[a[2]-1]%pp);
    for(ll i=3;i<=n;i++)
    {
        ans+=b[a[i]-1]*query2(a[i]-1);
        ans%=pp;
        update(a[i],b[a[i]-1]%pp);
        update2(a[i],query(a[i]-1)*b[a[i]-1]%pp);    
    }
    printf("%lld\n",ans);    
}

 

bzoj5055

标签:class   limit   tree   include   严格   rip   desc   fine   center   

原文地址:http://www.cnblogs.com/dancer16/p/7613099.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!