
UVA-11990(线段树)
发布日期:2021-05-10 20:50:11
浏览次数:28
分类:原创文章
本文共 2468 字,大约阅读时间需要 8 分钟。
题目链接:https://vjudge.net/problem/UVA-11990
过几天我再来写题解
#include<map>#include<set>#include<cmath>#include<queue>#include<stack>#include<vector>#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#define ll long long#define ll long longusing namespace std;const int MAX = 2e5 + 10;struct node{ int t, v, index; bool flag;};node a[MAX], b[MAX];int pos[MAX];int ans[MAX];int bit[MAX];int n, m;int sum(int i) { int s = 0; while (i > 0) { s += bit[i]; i -= i & (-i); } return s;}void add(int i, int x) { while(i <= n) { bit[i] += x; i += i & (-i); }}bool cmpt(node a, node b){ return a.t < b.t;}bool cmpx(node a, node b){ return a.index < b.index;}void cdq(int L, int R) { if(L >= R) return; int mid = (L + R) / 2; int len = 0; for(int i = L; i <= mid; i++) { b[++len] = a[i]; b[len].flag = 0; } for(int i = mid + 1; i <= R; i++) { b[++len] = a[i]; b[len].flag = 1; } sort(b + 1, b + len + 1, cmpx); for(int i = 1; i <= len; i++) { if(b[i].flag == 0) add(b[i].v, 1); else ans[b[i].t] += sum(n) - sum(b[i].v); } for(int i = 1; i <= len; i++) { if(b[i].flag == 0) add(b[i].v, -1); } for(int i = len; i >= 1; i--) { if(b[i].flag == 0) add(b[i].v, 1); else ans[b[i].t] += sum(b[i].v); } for(int i = 1; i <= len;i++) { if(b[i].flag == 0) add(b[i].v, -1); } cdq(L, mid); cdq(mid + 1, R);}int main() { while (scanf("%d%d", &n, &m) != EOF) { memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); memset(ans, 0, sizeof(ans)); memset(pos, 0, sizeof(pos)); memset(bit, 0, sizeof(bit)); for(int i = 1; i <= n; i++) { scanf("%d", &a[i].v); pos[a[i].v] = i; a[i].index = i; } int T = n; for(int i = 1; i <= m; i++) { int x; scanf("%d", &x); a[pos[x]].t = T--; } for(int i = 1; i <= n; i++) { if(!a[i].t) a[i].t = T--; } sort(a + 1, a + n + 1, cmpt); cdq(1, n); ll res = 0;//int res 是错的 for(int i = 1; i <= n; i++) res += ans[i]; for(int i = n; i >= n - m + 1; i--) { printf("%lld\n", res); res -= ans[i]; } }}//5 4 1 5 3 4 2 5 1 4 2
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年05月11日 16时45分03秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java包装类、拆箱和装箱详解
2025-04-02
Java匹配文件流特定数据块方法
2025-04-02
java单例模式
2025-04-02
Java原型模式(Prototype模式)
2025-04-02
Java参数传递到底是按 值传递 还是 引用传递 ?
2025-04-02
JAVA反射
2025-04-02
Java反射
2025-04-02
java反射介绍
2025-04-02
Java反射代码编写
2025-04-02
JAVA反射机制
2025-04-02
JAVA反射机制
2025-04-02
java反射机制之Method invoke执行调用方法例子
2025-04-02
Java反射获取private属性和方法(子类,父类,祖先....)
2025-04-02
java反射(1):Class代表类
2025-04-02
java反射(3):Method代表类
2025-04-02
java反射(4):Constructor代表类
2025-04-02
Java反序列化-CC2分析,从零基础到精通,收藏这篇就够了!
2025-04-02
Java反序列化和JNDI注入漏洞案例实战
2025-04-02
Java反序列化测试
2025-04-02