洛谷p1966火柴排队题解
2024-10-20 17:26:58
ps:鉴于你们的蒟蒻yxj实在太蒻辽, 所以, 看不懂也是正常的........
树状数组
xxy学姐给我们讲的树状数组, 她讲的真的是太好啦!qwq!吹爆xxy
然后, 为了巩固自己, 硬着头皮写题解
读完题之后来分析是要求逆序对
可以先离散化
因为我们要顺序存, f1数组的第i小和f2数组的第i小在同一个位置一定就是最优的
然后再求在离散化的那个数组里的逆序对的个数
你们将就着看代码吧,水平不够啊qwq..
#include <iostream>
#include <cstdio>
#include <algorithm>
#define mod 99999997
using namespace std;
const int N = ;
struct node {
long long h, id;
}f1[N], f2[N];
int n;
int id[N], c[N];
int cmp (node x, node y) {
return x.h < y.h;
}
int lowbit (int k) {
return k & (-k);
}
void change (int k) {
while (k <= n) {
c[k]++;
c[k] %= mod;
k += lowbit (k);
}
}
int query (int k) {
long long sum = ;
while (k) {
sum += c[k];
sum %= mod;
k -= lowbit (k);
}
return sum;
}
int main () {
scanf ("%d", &n);
for (int i = ; i <= n; i++)
scanf ("%lld", &f1[i].h),f1[i].id = i;
for (int i = ; i <= n; i++)
scanf ("%lld", &f2[i].h), f2[i].id = i;
sort (f1 + , f1 + + n, cmp);
sort (f2 + , f2 + + n, cmp);
for (int i = ; i <= n; i++)
id[f1[i].id] = f2[i].id;
long long ans = ;
for (int i = ; i <= n; i++) {
change (id[i]);
ans += i - query(id[i]);
ans %= mod;
}
printf ("%lld", ans);;
return ;
}
最新文章
- 第K大数
- 25个最佳的 WordPress Gallery 画廊插件
- Spark MLib 数据类型
- .NET NLog 详解(一)
- jQuery实现置顶和置底特效
- view视图--display中echo出ob_get_contents的缓冲内容--(实现,拼接好文件--导入文件)
- 如何给grldr.mbr和grldr改名
- Vim 第一天
- 用JS获取地址栏中的参数的简易方法
- android应用中去android市场去评分的功能实现(吐槽一波个人应用上线...)
- 通过IntelliJ IDEA和Maven命令查看某个jar包是怎么引入的
- python基础语法及知识点总结
- nwjs 解决手指可滑动问题
- 关于jQuery中click&;live&;on中的坑
- 批量删除SQL数据库中的所有表【笔记】
- android 分辨率
- Android实现EditText的富文本编辑
- 软件级负载均衡器(LVS/HAProxy/Nginx)的特点简介和对比
- vue-cli环境搭建初探!
- C++继承 派生类中的内存布局(单继承、多继承、虚拟继承)