hdu2838树状数组解逆序
离散化和排序后的序号问题搞得我实在是头痛
不过树状数组解逆序和偏序一类问题真的好用
更新:hdu的数据弱的真实,我交上去错的代价也对了。。
下面的代码是错的
/*
每个点的贡献度=权值*在这个点之前的比它大的点数量+在这个点前面比它大的所有点之和
开两个树状数组,一个保存相应序号的点值,另一个保存相应序号的
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 100005
struct node{
int x,id;
bool operator<(const node & a)const{
return x<a.x;
}
}a[maxn];
int b[maxn];//b数组按输入顺序维护每个点的权值,序号
ll bit1[maxn],bit2[maxn];
int n;
void add1(int x){
for(int i=x;i<=maxn;i+=i&-i)
bit1[i]++;
}
void add2(int x,int num){
for(int i=x;i<=maxn;i+=i&-i)
bit2[i]+=num;
}
ll query1(int x){
ll res=;
for(int i=x;i;i-=i&-i)
res+=bit1[i];
return res;
}
ll query2(int x){
ll res=;
for(int i=x;i;i-=i&-i)
res+=bit2[i];
return res;
} int main(){
while(scanf("%d",&n)==){
for(int i=;i<=n;i++)
scanf("%d",&a[i].x),a[i].id=i;
sort(a+,a++n);
for(int i=;i<=n;i++) b[a[i].id]=i;//其实就是一次映射,由于a数组进行了排序,该映射要找到原序列的每个数在排序后,在新的数组里的位置
ll ans=;
for(int i=;i<=n;i++){
ans+=a[b[i]].x*(query1()-query1(a[b[i]].x));//通过映射i->b[i],找到每个数新的位置
ans+=query2()-query2(a[b[i]].x);
add1(b[i]);
add2(b[i],a[b[i]].x);
}
printf("%lld\n",ans); }
return ;
}
下面的代码是对的
#include<iostream>
using namespace std;
#define N 100001
int n;
struct node
{
int index;
__int64 sum;
}c[N];
int lowbit(int x)
{
return x&(-x);
}
void update(int x,int k,int s)
{
while(x<=n)
{
c[x].index+=k;
c[x].sum+=s;
x+=lowbit(x);
}
}
int getsum_index(int x)
{
int ans=;
while(x>)
{
ans+=c[x].index;
x-=lowbit(x);
}
return ans;
}
__int64 getsum_sum(int x)
{
__int64 ans=;
while(x>)
{
ans+=c[x].sum;
x-=lowbit(x);
}
return ans;
}
int main(void)
{
while(~scanf("%d",&n))
{
int i; __int64 ans=;
memset(c,,sizeof(c));
for(i=;i<=n;i++)
{
int x;
scanf("%d",&x);
update(x,,x);
__int64 k1=i-getsum_index(x);
if(k1!=)
{
__int64 k2=getsum_sum(n)-getsum_sum(x);
ans=ans+k1*x+k2;
} }
printf("%I64d/n",ans);
}
}
hdu2838树状数组解逆序的更多相关文章
- Ultra-QuickSort(树状数组求逆序对数)
Ultra-QuickSort 题目链接:http://poj.org/problem?id=2299 Time Limit: 7000MS Memory Limit: 65536K Total ...
- [zoj4046][树状数组求逆序(强化版)]
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4046 题意:有一个含有n个元素的数列p,每个元素均不同且为1~n中的一个, ...
- 用树状数组求逆序对数(poj2299)
Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 46995 Accepted: 17168 ...
- POJ 2299 Ultra-QuickSort (树状数组 && 离散化&&逆序)
题意 : 给出一个数n(n<500,000), 再给出n个数的序列 a1.a2.....an每一个ai的范围是 0~999,999,999 要求出当通过相邻两项交换的方法进行升序排序时需要交换 ...
- 【CDOJ931】Car race game(树状数组求逆序)
题目连接:http://acm.uestc.edu.cn/#/problem/show/931 OJ评判系统有些坑,不支持__int64以及输出的%I64d大家注意.全开long long也会TLE, ...
- POJ-2299 Ultra-QuickSort(用树状数组求逆序对数)
题目链接 ac代码 #include<iostream> #include<cstdio> #include<cstring> #include<algori ...
- poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)
题目链接:http://poj.org/problem?id=2299 Description In this problem, you have to analyze a particular so ...
- POJ2299Ultra-QuickSort(归并排序 + 树状数组求逆序对)
树状数组求逆序对 转载http://www.cnblogs.com/shenshuyang/archive/2012/07/14/2591859.html 转载: 树状数组,具体的说是 离散化+树 ...
- 【bzoj2789】[Poi2012]Letters 树状数组求逆序对
题目描述 给出两个长度相同且由大写英文字母组成的字符串A.B,保证A和B中每种字母出现的次数相同. 现在每次可以交换A中相邻两个字符,求最少需要交换多少次可以使得A变成B. 输入 第一行一个正整数n ...
随机推荐
- 金融量化分析【day113】:羊驼策略
零.动量策略VS反转策略 1.实现代码 # 导入函数库 import jqdata import pandas as pd import numpy as np import datetime imp ...
- mysql学习笔记--- 字符串函数、日期时间函数
一.常见字符串函数: 1.CHAR_LENGTH 获取长度(字符为单位) 2.FORMAT 格式化 3.INSERT 替换的方式插入 4.INSTR 获取位置 5.LEFT/RIGHT 取左 ...
- 缓存穿透、雪崩、热点与Redis
(拼多多问:Redis雪崩解决办法) 导读:互联网系统中不可避免要大量用到缓存,在缓存的使用过程中,架构师需要注意哪些问题?本文以 Redis 为例,详细探讨了最关键的 3 个问题. 一.缓存穿透预防 ...
- pyinstaller 打包不成功,提示inporterror 缺少xlrd、xlwt
问题:pyinstaller 打包不成功,提示inporterror 缺少xlrd.xlwt 解决:将 pypiwin 230 改为 219
- ditto复制增强
1.下载 http://ditto-cp.sourceforge.net/ 2.用法 ctrl+` ctrl+数字 或者 ctrl +` 然后用鼠标选择 soeasy
- 【Python】zip文件密码破解
掌握基础语法后,尝试使用python的zipfile模块练手. zipfile是Python里用来做zip格式编码的压缩和解压缩的. 这里将大体的思路分解成四段代码,逐一完善功能: 第一段代码:解压z ...
- NMS和soft-nms算法
非极大值抑制算法(nms) 1. 算法原理 非极大值抑制算法(Non-maximum suppression, NMS)的本质是搜索局部极大值,抑制非极大值元素. 2. 3邻域情况下NMS的实现 3邻 ...
- Faster rcnn代码理解(3)
紧接着之前的博客,我们继续来看faster rcnn中的AnchorTargetLayer层: 该层定义在lib>rpn>中,见该层定义: 首先说一下这一层的目的是输出在特征图上所有点的a ...
- David McCullough, Jr.为韦斯利高中毕业生演讲〈你并不特别〉
Dr. Wong, Dr. Keough, Mrs.Novogroski, Ms. Curran, members of the board of education, familyand frien ...
- Graphql 相关 strapi -- Koa2
Graphql 相关资源: https://github.com/chentsulin/awesome-graphql graphql-apis : https://gi ...