luogu-1908 逆序对 离散化+树状数组
题目链接:https://www.luogu.org/problem/show?pid=P1908
题意
简单的求逆序对
思路
用树状数组来做逆序对
对于过大的数字来讲,用离散化处理即可
比赛的时候没有想到离散化啊,笨
还有一点,如果有重复数字出现的话,可以考虑用一个vis数组存下对应元素出现的次数,计数时减掉就好
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#define lowbit(x) ((x)&(-x))
using namespace std;
const int maxn=40000;
struct Item{
    int val, id;
    bool operator < (const Item &a) const{
        return val>a.val;
    }
}item[maxn+5];
int n, vis[maxn], tree[maxn+5];
int sum(int x){
    int ans=0;
    for (int i=x; i>0; i-=lowbit(i))
        ans+=tree[i];
    return ans;
}
void add(int x, int val){
    for (int i=x; i<=n; i+=lowbit(i))
        tree[i]+=val;
}
int main(void){
    scanf("%d", &n);
    for (int i=0; i<n; i++){
        scanf("%d", &item[i].val);
        item[i].id=i+1;
    }
    sort(item, item+n);
    int ans=0;
    for (int i=0; i<n; i++){
        ans+=sum(item[i].id);
        add(item[i].id, 1);
    }printf("%d\n", ans);
    return 0;
}
| Time | Memory | 
|---|---|
| 112ms | 2273KB | 
luogu-1908 逆序对 离散化+树状数组的更多相关文章
- AcWing 107. 超快速排序(归并排序 + 逆序对 or 树状数组)
		在这个问题中,您必须分析特定的排序算法----超快速排序. 该算法通过交换两个相邻的序列元素来处理n个不同整数的序列,直到序列按升序排序. 对于输入序列9 1 0 5 4,超快速排序生成输出0 1 4 ... 
- 洛谷P1908 逆序对 (树状数组+离散化)
		模板题,树状数组加上离散化求逆序对. 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 ... 
- 【Luogu】P3157动态逆序对(树状数组套主席树)
		题目链接 md第一道在NOILinux 下用vim做的紫题.由于我对这个操作系统不是很熟悉,似乎有什么地方搞错了,md调死.(我还打了两遍代码,调了两个小时) 但是这道题并不难,就是树状数组套上主席树 ... 
- Day2:T4求逆序对(树状数组+归并排序)
		T4: 求逆序对 A[I]为前缀和 推导 (A[J]-A[I])/(J-I)>=M A[j]-A[I]>=M(J-I) A[J]-M*J>=A[I]-M*I 设B[]=A[]-M*( ... 
- P1908 逆序对-(树状数组)
		https://www.luogu.org/problem/P1908 比较喜欢线段树,懒得用树状数组(只会套模板,位运算的精髓没有领悟到),一直没有记录树状数组代码,又得捡回来,趁这道题记录一下模板 ... 
- 剑指 Offer 51. 数组中的逆序对 + 归并排序 + 树状数组
		剑指 Offer 51. 数组中的逆序对 Offer_51 题目描述 方法一:暴力法(双层循环,超时) package com.walegarrett.offer; /** * @Author Wal ... 
- 【BZOJ 3295】动态逆序对 - 分块+树状数组
		题目描述 给定一个1~n的序列,然后m次删除元素,每次删除之前询问逆序对的个数. 分析:分块+树状数组 (PS:本题的CDQ分治解法见下一篇) 首先将序列分成T块,每一块开一个树状数组,并且先把最初的 ... 
- Bzoj 3295: [Cqoi2011]动态逆序对  分块,树状数组,逆序对
		3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2886 Solved: 924[Submit][Stat ... 
- bzoj1831 逆序对 (dp+树状数组)
		注意到,所有的-1应该是一个不降的序列,否则不会更优那就先求出来不是-1的的逆序对个数,然后设f[i][j]表示第i个-1放成j的前i个-1带来的最小逆序对数量这个可以树状数组来求 #include& ... 
随机推荐
- 10.ref   regex   unordered_set   smartpoint
			ref引用不可以复制的对象 void print(std::ostream &os, int i) { os << i << endl; } //ref引用不可以复制的 ... 
- luogu 1558 色板游戏
			写这篇博客不是为了总结我的算法,而是为了纪念让我爆零的套路..... 色板游戏 色板长度为\(L\),\(L\)是一个正整数,所以我们可以均匀地将它划分成\(L\)块\(1\)厘米长的小方格.并从左到 ... 
- java类型与Hadoop类型之间的转换
			java基本类型与Hadoop常见基本类型的对照Long LongWritableInteger IntWritableBoolean BooleanWritable String Text ... 
- Java中如何解决线程安全问题
			给出一个问题,如下: 解决方案如下: public class Demo_5 { public static void main(String[] args) { //创建一个窗口 TicketWin ... 
- win10关闭更新
			计算机--管理: 找到windows update 服务关闭: 
- IPv6第二层寻址,IPv6接口要求
			1. IPv6第二层寻址 IPV6地址以两种方式与第2层地址相关.第一种方式是IPV6独有的,提供了从第2层地址构建接口ID的机制.第二种方式对IPv4和IPV6都是一样的,提供了将一个IP组播地址映 ... 
- How Javascript works (Javascript工作原理) (八) WebAssembly 对比 JavaScript 及其使用场景
			个人总结: webworker有以下三种: Dedicated Workers 由主进程实例化并且只能与之进行通信 Shared Workers 可以被运行在同源的所有进程访问(不同的浏览的选项卡,内 ... 
- list 分页
			package com.jsz.peini.common.util; import java.util.ArrayList; import java.util.List; public class S ... 
- 【转载】如何学习C++
			原文地址: http://www.hankcs.com/program/cpp/how_to_learn_c__.html 1.把C++当成一门新的语言学习(和C没啥关系!真的.): 2.看<T ... 
- 第一个JavaWeb工程
			这个工程主要用来研究log4j,所以就只有一个页面,希望以后慢慢进步. java动态生成网页主要使用servlet.把请求拦截下来,处理后返回结果. 这里创建的是一个maven工程. 结构如下: 
