寒假Day30:逆序对-树状数组/归并排序
这个是利用树状数组求得逆序对的AC代码:

1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #include <iostream> 5 #include<algorithm> 6 typedef long long ll; 7 using namespace std; 8 9 struct node 10 { 11 int x,id; 12 }a[500020]; 13 14 int b[500020],n; 15 ll c[500020]; 16 17 int cmp(node x,node y) 18 { 19 if(x.x!=y.x) 20 return x.x<y.x; 21 return x.id<y.id; 22 } 23 24 int lowbit(int x) 25 { 26 return x&(-x); 27 } 28 29 void add(int x,int k) 30 { 31 while(x<=n) 32 { 33 c[x]+=k; 34 x+=lowbit(x); 35 } 36 } 37 38 ll sum(int x) 39 { 40 ll res=0; 41 while(x>=1) 42 { 43 res+=c[x]; 44 x-=lowbit(x); 45 } 46 return res; 47 } 48 49 int main() 50 { 51 while(~scanf("%d",&n)&&n) 52 { 53 memset(c,0, sizeof(a)); 54 for(int i=1;i<=n;i++) 55 { 56 scanf("%d",&a[i].x); 57 a[i].id=i;//在原数组中的位置 58 } 59 sort(a+1,a+1+n,cmp); 60 for(int i=1;i<=n;i++) 61 b[a[i].id]=i; 62 ll w=0; 63 for(int i=1;i<=n;i++) 64 { 65 add(b[i],1); 66 w=w+i-sum(b[i]); 67 } 68 cout<<w<<endl; 69 } 70 return 0; 71 }
还可以用归并排序,但是我还没学归并排序的代码
分类:
线段树/树状数组
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」