HDU 5196 DZY Loves Inversions(树状数组,二分)
来源:互联网 发布:淘宝创维官方旗舰店 编辑:程序博客网 时间:2024/06/10 19:29
这题之前CC做过类似的,思路如官方题解。
代码:
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int N = 100005;typedef long long ll;int n, m;ll q;struct Hash { int v, id; void read(int id) { scanf("%d", &v); this->id = id; }} h[N];bool cmp(Hash a, Hash b) { return a.v < b.v;}int a[N];int bit[N], l[N];inline int lowbit(int x) {return (x&(-x));}void add(int x, int v) { while (x <= n) { bit[x] += v; x += lowbit(x); }}int get(int x) { int ans = 0; while (x) { ans += bit[x]; x -= lowbit(x); } return ans;}ll sum[N], sum2[N];ll ans[N];int X[N], Y[N];void gao(ll q, int bo) { if (q < 0) return; memset(bit, 0, sizeof(bit)); int r = 0; ll tot = 0; for (int i = 1; i <= n; i++) { while (r <= n && tot <= q) { r++; if (r > n) break; tot += (r - i) - get(a[r]); add(a[r], 1); } l[i] = r - 1; add(a[i], -1); tot -= get(a[i] - 1); } sum[n + 1] = 0; for (int i = n; i >= 1; i--) sum[i] = sum[i + 1] + (l[i] - i + 1); int x, y; for (int i = 0; i < m; i++) { int x = X[i], y = Y[i]; int tmp = lower_bound(l + x, l + y + 1, y) - l - 1; ans[i] += bo * (sum[x] - sum[tmp + 1] + sum2[y - tmp]); }}int main() { for (int i = 1; i < N; i++) sum2[i] = sum2[i - 1] + i; while (~scanf("%d%d%I64d", &n, &m, &q)) { for (int i = 1; i <= n; i++) h[i].read(i); sort(h + 1, h + n + 1, cmp); int tmp = 1; a[h[1].id] = 1; for (int i = 1; i <= n; i++) { if (h[i].v != h[i - 1].v) tmp++; a[h[i].id] = tmp; } for (int i = 0; i < m; i++) scanf("%d%d", &X[i], &Y[i]); memset(ans, 0, sizeof(ans)); gao(q, 1); gao(q - 1, -1); for (int i = 0; i < m; i++) printf("%I64d\n", ans[i]); } return 0;}
0 0
- HDU 5196 DZY Loves Inversions(树状数组,二分)
- hdu 5196 DZY Loves Inversions(线段树+树状数组+离线+two points)
- hdu 5196 DZY Loves Inversions(树状数组,二分法,逆序数)
- HDU 5196 DZY Loves Inversions(离线+线段树)
- hdu 5196 DZY Loves Inversions && BestCoder Round #35
- hdu5196 DZY Loves Inversions 思路,计数
- 【BZOJ】【P3570】【DZY Loves Physics I】【题解】【树状数组】
- SGU180:Inversions(树状数组)
- hdu 5649 DZY Loves Sorting(二分+线段树)
- [HDU 5649] DZY Loves Sorting (线段树+二分)
- HDU 5649 DZY Loves Sorting(线段树+二分)
- HDU 5649 DZY Loves Sorting (二分 + 线段树)
- hdu DZY Loves Balls
- HDU 5194 DZY Loves Balls
- HDU 5194 DZY Loves Balls
- 【HDU 5646】DZY Loves Partition
- HDU 5646-DZY Loves Partition
- HDU 5648 DZY Loves Math
- java_web初学笔记之<JavaBean及内省机制>
- [Android][ImageView]ImageView浏览图片的2个方式
- ffmpeg常用命令积累
- Redis内存管理的基石zmallc.c源码解读(一)
- 检查元素是否具有某个样式
- HDU 5196 DZY Loves Inversions(树状数组,二分)
- web图表FineReport之图表交互功能
- C++如何阻止一个类被实例化
- JSP常用指令
- LBP特征匹配的两种鲁棒方法
- adb: unknown host service问题
- 面试小技巧1:这次面试就差不多了,你有什么问题需要问我呢?
- Java 如何判断线程池所有任务是否执行完毕
- 删除div