bzoj 5055: 膜法师 树状数组+离散
先枚举每一个数,看它前面有几个比它小,算一下和为sum1,后面有几个比它大,算一下和为sum2,对答案的贡献为A[i]*sum1*sum2。
离散化后,树状数组就可以了。
就是倒着一边,顺着一边,统计就ok了,离散是为了大小,先后顺序(方便去重)
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
#include<map>
#define mod 19260817
#define N 300007
#define ll long long
using namespace std; int n,top;
ll ans;
ll a[N],tree[N],c[N];
map<int,int>p;
struct Node
{
int zhi,id;
}b[N]; bool cmp(Node x,Node y)
{
return x.zhi<y.zhi;
}
int lowbit(int x){return x&(-x);}
ll query(int x)
{
ll res=;
for (int i=x;i>=;i-=lowbit(i))
res+=tree[i];
res%=mod;
return res;
}
void add(int x,ll z)
{
for (int i=x;i<=top;i+=lowbit(i))
tree[i]=(tree[i]+z)%mod;
}
int main()
{
p.clear();
scanf("%d",&n);
for (int i=;i<=n;i++)
{
scanf("%d",&a[i]);
a[i]%=mod;
b[i].zhi=a[i];
b[i].id=i;
}
sort(b+,b+n+,cmp);
b[].zhi=-;
for (int i=;i<=n;i++)
if (b[i].zhi!=b[i-].zhi) p[b[i].zhi]=++top;
for (int i=;i<=n;i++)
{
c[i]=1ll*query(p[a[i]]-)*a[i]%mod;
add(p[a[i]],a[i]);
}
memset(tree,,sizeof(tree));
for (int i=n;i>=;i--)
{
ans=(ans+1ll*c[i]*(query(top)-query(p[a[i]])+mod))%mod;
add(p[a[i]],a[i]);
}
printf("%lld",ans);
}
bzoj 5055: 膜法师 树状数组+离散的更多相关文章
- bzoj 5055: 膜法师 -- 树状数组
5055: 膜法师 Time Limit: 10 Sec Memory Limit: 128 MB Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇 ...
- bzoj 5055: 膜法师——树状数组
Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒, 显然,他能为长者所续的时间,为这三个维度上能量的乘 ...
- 【BZOJ5055】膜法师 树状数组
[BZOJ5055]膜法师 Description 题目描述 在给定的维度序列a中, 求出所有满足i<j<k且ai<aj<ak的ai*aj*ak的和 即 ∑ (a_i*a_j* ...
- 【BZOJ】1818: [Cqoi2010]内部白点(树状数组+离散+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1818 这一题一开始我就看错了,bzoj的那个绝对值109简直坑人,应该是10^9,我直接写了个暴力. ...
- [BZOJ 5055]膜法师
Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒, 显然,他能为长者所续的时间,为这三个维度上能量的乘 ...
- Bzoj 2789: [Poi2012]Letters 树状数组,逆序对
2789: [Poi2012]Letters Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 278 Solved: 185[Submit][Stat ...
- BZOJ 4361 isn | DP 树状数组
链接 BZOJ 4361 题面 给出一个长度为n的序列A(A1,A2...AN).如果序列A不是非降的,你必须从中删去一个数, 这一操作,直到A非降为止.求有多少种不同的操作方案,答案模10^9+7. ...
- BZOJ.1901.Dynamic Rankings(树状数组套主席树(动态主席树))
题目链接 BZOJ 洛谷 区间第k小,我们可以想到主席树.然而这是静态的,怎么支持修改? 静态的主席树是利用前缀和+差分来求解的,那么对于每个位置上的每棵树看做一个点,拿树状数组更新. 还是树状数组的 ...
- BZOJ 2727 双十字(树状数组)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2727 题意: 思路:思路来自这里.首先对于每个位置(i,j)用C[i][j]表示该位置同 ...
随机推荐
- SAP不同的产品是如何支持用户创建自定义字段的
我们从SAP CRM,Cloud for Customer(简称C4C)和S/4HANA这三个产品分别来看看. SAP CRM 我们使用所谓的Application Enhancement Tool( ...
- 用”人话”解释CNN —— 对单个特征图进行视觉化
转载自:http://nooverfit.com/wp/pycon-2016-tensorflow-研讨会总结-tensorflow-手把手入门-用人话解释cnn 首先什么是CNN? 其实, 用”人话 ...
- kitti raw data development kit的使用
run_demoVelodyne.m使用:http://blog.csdn.net/qq_33801763/article/details/78959205 https://www.cnblogs ...
- numpy.random.randint
low.high.size三个参数.默认high是None,如果只有low,那范围就是[0,low).如果有high,范围就是[low,high). >>> np.random.ra ...
- intellij IDEA版本控制设置
我们开发肯定是有版本控制的,大家以前Eclipse的时候在本地文件和版本库不一致的时候,那么文件以及所在的文件夹都会出现一个〉表示,大家能很轻松的看到本地文件修改了哪一些,但是IntelliJ中默认是 ...
- Difference between x:Reference and x:Name
{x:Reference ...} -> returns just a reference of an object it doesn't create that "bridge&qu ...
- IjkPlayer播放器秒开优化以及常用Option设置
https://blog.csdn.net/shareus/article/details/78585260 ijkplayer点播和直播视频 问题 解决及优化 https://blog.csdn. ...
- 对Java提供的锁机制的一些思考
Java的数据会在CPU.Register.Cache.Heap和Thread stack之间进行复制操作,而前面四个都是在Java Threads之间共享,因此Java的锁机制主要用于解决Racin ...
- 【Java_基础】JVM内存模型与垃圾回收机制
1. JVM内存模型 Java虚拟机在程序执行过程会把jvm的内存分为若干个不同的数据区域来管理,这些区域有自己的用途,以及创建和销毁时间. JVM内存模型如下图所示 1.1 程序计数器 程序计数器( ...
- 基于ubuntu 14.04 kvm虚拟化部署
1. 宿主机环境(dell备份服务器) Ubuntu 14.04 LTS 64位 内存:16G 硬盘:2T 2. 确认CPU是否支持硬件虚拟化 root@shwilling:~# egrep -o ' ...