关注
第二题ac代码: #include <bits/stdc++.h> using namespace std; long long f[30], e[30]; int a[1050000]; void divide(int l, int r,int x); int main(){ int n, m; scanf("%d", &n); m = pow(2,n); for (int i=0; i<m; ++i){ scanf("%d", &a[i]); } divide(0,m,n); int t, p; long long ans; scanf("%d", &t); while (t--){ scanf("%d", &p); for (int i=1; i<=p; ++i) f[i] = pow(2,i+n-2) - e[i] - f[i]; ans = 0; for (int i=1; i<=n; ++i){ ans += f[i]; } cout << ans << endl; } } void divide(int l, int r,int x){ if (x==0){ return; } int mid = (l+r) / 2; divide(l,mid,x-1); divide(mid,r,x-1); int nowp = mid; for (int i=l; i<mid; i++){ while (nowp < r && a[nowp] < a[i]) nowp++; f[x] += (nowp-mid); } int i=l, j=mid, ri, rj; while (i<mid && j<r){ if (a[i] == a[j]){ ri = rj = 1; while (ri+i < mid && a[ri+i] == a[i]) ri++; while (rj+j < r && a[rj+j] == a[j]) rj++; e[x] += ri * rj; i += ri; j += rj; continue; } if (a[i] > a[j]) j++; else i++; } vector<int> v; i=l; j=mid; while (i<mid || j<r){ if (i==mid) { v.push_back(a[j++]); continue; } if (j==r) { v.push_back(a[i++]); continue; } if (a[i] < a[j]) v.push_back(a[i++]); else v.push_back(a[j++]); } for (int i=l; i<r; ++i) a[i] = v[i-l]; }
查看原帖
点赞 1
相关推荐
查看17道真题和解析 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 这个offer值得去吗? #
3739次浏览 68人参与
# 你实习是赚钱了还是亏钱了? #
119554次浏览 661人参与
# 联宝杯大学生创新大赛,你的技术值得产业级答案 #
43544次浏览 498人参与
# 你会因为行情,降低找工作标准吗? #
13593次浏览 150人参与
# 机械人晒出你的简历 #
191575次浏览 1104人参与
# 如果春招能重来,我会___ #
6611次浏览 75人参与
# 实习想申请秋招offer,能不能argue薪资 #
256153次浏览 1333人参与
# 刚入职的你踩过哪些坑 #
60130次浏览 417人参与
# 腾讯云智研发工作体验 #
43444次浏览 177人参与
# 招银网络求职进展汇总 #
250025次浏览 1121人参与
# 面试官拷打AI项目都会问什么? #
2813次浏览 148人参与
# 想做Agent可以做哪些岗位? #
3360次浏览 44人参与
# 你觉得最好用的AI编程工具是_ #
1400次浏览 35人参与
# 除了线上,还能去哪些地方投简历 #
4319次浏览 47人参与
# 求职你最看重什么? #
166389次浏览 907人参与
# 你的秋招白月光和意难平公司 #
98296次浏览 350人参与
# 实习第一天,你在干什么 #
4779次浏览 41人参与
# 暑假倒计时,你都干了些啥? #
58952次浏览 314人参与
# 如何一边实习一边秋招 #
2235887次浏览 19228人参与
# 如何排解工作中的焦虑 #
330538次浏览 2832人参与
# 你和你的mentor相处模式是__ #
6912次浏览 62人参与