洛谷——P1966 火柴排队&&P1774 最接近神的人_NOI导刊2010提高(02)
P1966 火柴排队
这题贪心显然,即将两序列中第k大的数的位置保持一致,证明略;
树状数组求逆序对啦
浅谈树状数组求逆序对及离散化的几种方式及应用
方法:从前向后每次将数插入到bit(树状数组)中,求其前缀和(在它之前插入且比它小的数),那么用i(当前插入的数的总数)- 前缀和就是其(以c[i]为结尾)逆序对对数
这个题需要将一个序列按照另一个序列排序,因为只需要移动一个序列,sort排序就有了第k小的数的下标
$c[a[i].id]=b[i].id$
第i小的数在a中的位置就是b中第i小的数应放的位置,相当于以第一个数列为关键字排序第二个数列
#include<bits/stdc++.h> #define N 1010100
using namespace std; const int mod=; int n,c[N],bit[N],ans;
struct node{
int x,id;
}a[N],b[N]; bool cmp(node A,node B){
return A.x<B.x;
} int lowbit(int k){
return k&(-k);
}
void add(int x,int w){
while(x<=n){
bit[x]+=w;
bit[x]%=mod;
x+=lowbit(x);
}
}
int sum(int x){
int res=;
while(x){
res+=bit[x];
x-=lowbit(x);
res%=mod;
}
return res%mod;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i].x),a[i].id=i;
for(int i=;i<=n;i++) scanf("%d",&b[i].x),b[i].id=i;
sort(a+,a++n,cmp);
sort(b+,b++n,cmp);
for(int i=;i<=n;i++)
c[a[i].id]=b[i].id;
for(int i=;i<=n;i++){
add(c[i],);
ans=(ans+(i-sum(c[i])))%mod;
}
printf("%d\n",ans);
return ;
}
P1774 最接近神的人_NOI导刊2010提高(02)
同样的离散化,只不过是从后向前插入,那么其前缀和就是逆序数。
#include<bits/stdc++.h>
#define N 500005
#define ll long long using namespace std; int n,h[N],c[N];
ll ans;
struct node{
int y;ll x;
bool operator<(const node A)const {
return x==A.x ? y<A.y :x<A.x;
}
}e[N]; void update(int k,int x){
for(;k<=n;k+=k&-k) c[k]+=x;
} ll query(int k){
ll an=;
for(;k;k-=k&-k) an+=c[k];
return an;
} int main()
{
cin>>n;
for(int i=;i<=n;i++)
scanf("%lld",&e[e[i].y=i].x);
sort(e+,e++n);
for(int i=n;i;i--){
ans+=query(e[i].y-);
update(e[i].y,);
}cout<<ans;
// printf("%lld",ans);
return ;
}
洛谷——P1966 火柴排队&&P1774 最接近神的人_NOI导刊2010提高(02)的更多相关文章
- 洛谷P1774 最接近神的人_NOI导刊2010提高(02) [2017年6月计划 线段树03]
P1774 最接近神的人_NOI导刊2010提高(02) 题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门 ...
- P1774 最接近神的人_NOI导刊2010提高(02)
P1774 最接近神的人_NOI导刊2010提高(02) 关于此题为什么可以使用求逆序对的方法来做 假设一个数\(a_i\),且前\(i-1\)个数已经成为单调增的数列. 我们要从前\(a_1\)至\ ...
- 洛谷P1774 最接近神的人_NOI导刊2010提高(02)(求逆序对)
To 洛谷.1774 最接近神的人 题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的 ...
- 洛谷 P1774 最接近神的人_NOI导刊2010提高(02)
题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的殿堂”.小FF猜想里面应该就有王室的 ...
- 洛谷——P1774 最接近神的人_NOI导刊2010提高(02)
https://www.luogu.org/problem/show?pid=1774 题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古 ...
- 【luogu P1774 最接近神的人_NOI导刊2010提高(02)】 题解
题目链接:https://www.luogu.org/problemnew/show/P1774 归并排序求逆序对. #include <cstdio> #define livelove ...
- luogu P1774 最接近神的人_NOI导刊2010提高(02)
题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的殿堂”.小FF猜想里面应该就有王室的 ...
- luoguP1774 最接近神的人_NOI导刊2010提高(02)x
P1774 最接近神的人_NOI导刊2010提高(02) 题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门 ...
- P1774 最接近神的人_NOI导刊2010[树状数组 逆序对 离散化]
题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的殿堂”.小FF猜想里面应该就有王室的 ...
随机推荐
- 【C++程序不输出】到底是什么造成了程序不输出
(ubuntu 16.04) 最近做题的时候,经常莫名其妙地,程序写的明明没毛病但是就是输出不了,气得我呀 然后某一次突然发现了原因,竟然是输出之后没有加endl或者空格! 例如: cout<& ...
- linux常用命令---持续添加中...
1.cp -r 源文件夹 目的文件夹 // -r 可递归所有子目录及文件 2.grep -r 查找内容 ./* //递归查找当前目录下所有文件指定内容 3. 查看系统运行时间 who - ...
- nodejs Yarn替代npm的包管理——快速、安全、可靠性高的依赖管理
Yarn能帮你解决的五件事 转自: http://www.qingpingshan.com/jb/javascript/185590.html 长话短说(TL;DR):在 JavaScript 领域有 ...
- git 命令 —— checkout
git checkout 会重写工作区.check in 常常表示酒店入住,则 check out 就表示结账(检查)离开. 1. 基本用法 Git学习笔记04–git checkout git ch ...
- bzoj1977 [BeiJing2010组队]次小生成树 Tree——严格次小生成树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1977 因为严格,所以要记录到 LCA 的一个次小值: 很快写好,然后改掉一堆错误后终于过了样 ...
- 特征变化--->标签到向量的转换(OneHotEncoder)
一.One-Hot Encoding One-Hot编码,又称为一位有效编码,主要是采用位状态寄存器来对个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效. 在实 ...
- 0619-dedeCMS数据表
CMS的层级从前台分主要分为首页--栏目页--内容页,从后台分主要是四张表之间的关系: 1.模型表--dede_channeltype(顶级) 2.栏目表--dede_arctype 3.数据表:分为 ...
- windows下 redis/tomcat 服务自启动
//设置redis服务自启动 //根据个人配置执行语句. redis-server --service-install redis.windows.conf --loglevel verbose ...
- oracle 误删数据
insert into hr.job_history select * from hr.job_history as of timestamp to_timestamp('2007-07-23 10: ...
- 非常无聊——STD::sort VS 基数排序
众所周知,Std::sort()是一个非常快速的排序算法,它基于快排,但又有所修改.一般来说用它就挺快的了,代码一行,时间复杂度O(nlogn)(难道不是大叫一声“老子要排序!!”就排好了么...). ...