URAL
来源:互联网 发布:营销网络地图代码 编辑:程序博客网 时间:2024/05/17 23:21
题目链接
树状数组求逆序数:
相当于一个标记的思想,用1来标记每一个位置
某一位置的逆序数不就是这个位置的坐标减去他前面出现的数字(因为他前面出现的一定是比它小的,而且还是被标记了,一定符合标准)
同时还要注意初始的比较值!!
Code:
//#include<bits/stdc++.h//树状数组求逆序对//错了非常多遍,今天才该对,原来凶手竟然是-1//如果每一个的逆序对数都是0,那么按照我的程序的输出就是0了//不符合条件,应该一开始的初值为-1//这也同时提醒了!!初始值一定要设置成一个取不到的值#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn = 10005;int c[maxn];int a[maxn];int n;int lowbit(int i){ return i & (-i);}void add(int i, int x){ while(i <= n) { c[i] += x; i += lowbit(i); } return ;}int sum(int i){ int s = 0; while(i > 0) { s += c[i]; i -= lowbit(i); } return s;}int solve(){ int ans = 0; for(int j = 0; j < n; j++) //j从0开始变化 { ans += j - sum(a[j]); //因为标记元素为0和1,如果从1开始计数,就会多一个 add(a[j], 1); } return ans;}int main(){ int K; scanf("%d %d", &n, &K); int kase, pos = 0, maxx = -1; for(kase = 1; kase <= K; kase++) { memset(a, 0, sizeof(a)); memset(c, 0, sizeof(c)); for(int i = 0; i < n; i++) scanf("%d", &a[i]); int ans = solve(); if(maxx < ans) maxx = ans, pos = kase; } cout << pos << endl; return 0;}
阅读全文
0 0
- URAL
- 【ural】
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- 一日一文(1)
- BaseWeb05-JSP
- 李飞飞高徒 Andrej Karpathy:计算机科学博士的生存指南
- linux下实现MySQL主从复制(Master-Slave)
- rpm
- URAL
- lua学习笔记——文件I/O
- 数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
- mysql主从复制
- 原码,反码,补码详解
- Linux下使用bufferevent实现tcp代理功能
- [零基础易语言教程]1-1 什么是易语言
- c++primer5 题3.36
- URI和URL的区别