码队的新桌游

码队的新桌游

树状数组、离散化、二维偏序

#include <bits/stdc++.h>
///即找x.a<y.b<x.c&&y.a<x.b<y.c的组数
using namespace std;

struct Item {
    int a, b, c;
    int id;
    int ans;

    explicit Item(int _a = 0, int _b = 0, int _c = 0) : a(_a), b(_b), c(_c) {}
};

struct cmpa {
    bool operator()(const Item &lhs, const Item &rhs) const {
        return lhs.a > rhs.a || (lhs.a == rhs.a && lhs.b < rhs.b)
               || (lhs.a == rhs.a && lhs.b == rhs.b && lhs.c < rhs.c);
    }
};

struct cmpc {
    bool operator()(const Item &lhs, const Item &rhs) const {
        return lhs.c > rhs.c || (lhs.c == rhs.c && lhs.b < rhs.b)
               || (lhs.c == rhs.c && lhs.b == rhs.b && lhs.a < rhs.a);
    }
};

priority_queue<Item, vector<Item>, cmpa> Qin;
priority_queue<Item, vector<Item>, cmpc> Qout;

const int MAXN = 300100;
int ca[MAXN];
int lsh[MAXN], lsc;
Item za[MAXN];
unordered_map<int, int> lss;

void addZ(int x, int v) {
    while (x <= lsc) {
        ca[x] += v;
        x += (x & -x);
    }
}

int getZ(int x) {
    int ans = 0;
    while (x) {
        ans += ca[x];
        x -= (x & -x);
    }
    return ans;
}

int main() {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; ++i) {
        scanf("%d%d%d", &za[i].a, &za[i].b, &za[i].c);
        Qin.push(za[i]);
        lsh[lsc++] = za[i].a;
        lsh[lsc++] = za[i].b;
        lsh[lsc++] = za[i].c;
        za[i].id = i;
    }
    sort(lsh, lsh + lsc);
    lsc = unique(lsh, lsh + lsc) - lsh;
    for (int i = 0; i < lsc; ++i) {
        lss[lsh[i]] = i + 1;///离散化
    }
    sort(za, za + n, [](const Item &a, const Item &b) { return a.b < b.b; });
    for (int i = 0; i < n; ++i) {
        while (!Qin.empty()) {
            Item xx = Qin.top();
            if (za[i].b > xx.a) {
                Qin.pop();///a小的先出来
                addZ(lss[xx.b], 1);///加入树状数组,若z[a].b<=xx.a,则za[i]必输
                Qout.push(xx);
            } else break;
        }
        while (!Qout.empty()) {
            Item xx = Qout.top();
            if (za[i].b >= xx.c) {
                Qout.pop();///c小的先出来
                addZ(lss[xx.b], -1);///减去,因为xx.c<=Z[a].b,则za[i]必赢
                ///树状数组中元素都满足xx.c>za[i].b
            } else break;
        }
        za[i].ans = getZ(lss[za[i].c]) - getZ(lss[za[i].a]);
    }

    sort(za, za + n, [](const Item &a, const Item &b) { return a.id < b.id; });
    for (int i = 0; i < n; ++i)printf("%d\n", za[i].ans-1);

    return 0;
}

原文地址:https://www.cnblogs.com/liulex/p/11393412.html

时间: 2024-11-15 17:21:14

码队的新桌游的相关文章

【团队项目选题】自选项目:桌游APP

由于我们团队的黄金点游戏结果是第二名,按理说是一定能选到一个自选项目的,所以以下只列出我们选择的自选项目. 自选项目名称:桌游APP(暂定,名字还没想好) 项目大致介绍:此APP集成了多种桌游,主要包括谁是卧底.狼人杀等(初期会先做一两个).使用场景主要是线下聚会时供大家娱乐使用.软件的功能会比市面上一些同类软件更强大且更贴心,如可以支持狼人杀的法官全部功能.软件的核心亮点在此请允许我们先不公布,到时候希望能给大家一个惊喜.

桌游『阿瓦隆』

<阿瓦隆>是以<抵抗组织>为基础扩展的同人系列,又称<抵抗组织2>或<圆桌骑士>,因趣味性而广受桌迷欢迎.这个游戏比狼人,三国杀,吸血鬼公会的优势在哪里?最重要的是这个游戏不会死人,全程不需要闭眼,无需裁判,每个人都可以从头参与到尾.要点:分析推理,演技,口才,性格,记忆力是比较关键的几个因素,分析推理跟记忆力几乎是贯穿这个游戏全程的.规则:参考『桌游干货<阿瓦隆>游戏规则及速成攻略』 - https://www.douban.com/note/

cocos2d-x 源码分析 : EventDispatcher、EventListener、Event 源码分析 (新触摸机制,新的NotificationCenter机制)

源码版本来自3.x,转载请注明 cocos2d-x 源码分析总目录 http://blog.csdn.net/u011225840/article/details/31743129 1.继承结构 1.1 结构 不详吐槽太多,也不贴图了,贴图要审核好久好久好久好久. 从小到大,先来看下Event的结构. 1.Event--------EventTouch,EventCustom,EventMouse,EventKeyboard,EventFocus,EventAcceleration 其中,Eve

P1922 女仆咖啡厅桌游吧

P1922 女仆咖啡厅桌游吧 题目背景 小v带萌萌的妹妹去玩,妹妹想去女仆咖啡馆,小v想去桌游吧. 妹妹:"我问你个问题,答不对你就做我一天的奴隶,答对了就今天我就全部听你的." 小v:"全部都听!?" 妹妹:"嘻嘻嘻,你还是回答问题吧!" 于是小v为了自己一天的幸福,来向你求助. 题目描述 小v所在的世界被规划成了树形结构,每一个节点上都可以建一个女仆咖啡厅或者桌游吧或者什么都不建.在确定点1为根节点之后,规划局要求:对于每一个非叶子的节点i,

luogu P1922 女仆咖啡厅桌游吧

题目背景 小v带萌萌的妹妹去玩,妹妹想去女仆咖啡馆,小v想去桌游吧. 妹妹:“我问你个问题,答不对你就做我一天的奴隶,答对了就今天我就全部听你的.” 小v:“全部都听!?” 妹妹:“嘻嘻嘻,你还是回答问题吧!” 于是小v为了自己一天的幸福,来向你求助. 题目描述 小v所在的世界被规划成了树形结构,每一个节点上都可以建一个女仆咖啡厅或者桌游吧或者什么都不建.在确定点1为根节点之后,规划局要求:对于每一个非叶子的节点i,设它子树(包括自己)中所有的女仆咖啡厅的数量为cafe[i],桌游吧数目为tab

# [银联初赛]码队弟弟的求和(数论-分块求和)

[银联初赛]码队弟弟的求和(数论-分块求和) 题链(计蒜客) 思路: 平方之和公式:\(1^2+2^2+...+n^2=\frac{n*(n+1)*(2*n+1))}{6}\),前缀和处理 分块求和思想: \(\lfloor \frac{n}{i} \rfloor\)对于每一个值,可能有多个\(i\)对应,把这些\(i\)分在同一块,累加的时候直接使用乘积代替加法 int res=0; for(int l=1,r;l<=n;l=r+1){ r=n/(n/l); res+=(n/i*(r-l+1)

翻String.Format源码发现的新东西:StringBuilderCache

起因: 记不清楚今天是为毛点想F12看String.Format的实现源码了,反正就看到了下图的鸟东西: 瞬间石化有没有,StringBuilder还能这么获取? 研究StringBuilderCache类 下面的事件也简单,果断在StringBuilderCache上面点了F12看源码(Resharpe真是好东西啊...) 首先看到的是这是一个internal的类,怪不得没见有人这么写过呢! 研究一番之后,终于弄清楚这货是干嘛的了:这个类的作用就是缓存一个StringBuilder对象,给那些

源码管理的新15条建议

作者:张克强    作者微博:张克强-敏捷307 建议之1:使用好的配置管理工具,也称为版本号控制工具(Version Control), 比方Git,SVN. 请彻底抛弃 VSS.假设是新採用配置管理工具,CVS已经不再是选项. 配置管理工具与版本号控制工具能够理解为指的是同样工具. 建议之2:抛弃古老的配置管理三库做法,常说的三库是指开发库(动态库).受控库和产品库(静态库).做法是开发库->受控库->产品库. 在当年没有强大版本号控制工具的"古代",三库做法是不得不的

从无人货架到无人售货柜,加了二维码就叫“新零售”吗?

近日,京东到家宣布,其新一代智能货柜--京东到家Go已正式对外运营.预计年底前京东到家Go将会覆盖包括北上广深在内的全国10个以上主要城市.随着京东到家Go的入局,国内无人售货柜市场已经聚集了众多巨头和创业企业.这个小小的柜子,似乎要承载企业切入"新零售"风口的重任. 但事实上,无人货架.无人售货柜并不是什么稀罕事物.其与原型自动售货机有着太多的相似之处,后者于上世纪70年代就在日本发展起来.而到了80年代,日本就已广泛使用自动售货机.来自JVMA的数据显示,截止到去年12月,日本已有