【拼十字——树状数组】

news/2025/2/8 17:20:35 标签: 算法

题目

暴力代码 30%

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5 + 10;
const int mod = 1e9 + 7;
int n;
int l[N], w[N], c[N];
int main()
{
    cin >> n;

    ll ans = 0;
    for (int i = 1; i <= n; i++)
    {
        cin >> l[i] >> w[i] >> c[i];
        for (int j = 1; j < i; j++)
        {
            if (l[j] > l[i] && w[j] < w[i] && c[j] != c[i] || l[j] < l[i] && w[j] > w[i] && c[j] != c[i])
                ans = (ans + 1) % mod;
        }
    }
    cout << ans;
}

代码

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5 + 10;
const int mod = 1e9 + 7;
struct node
{
    int l, w, c;
    bool operator<(const node &y) const
    {
        if (l != y.l)
            return l > y.l;
        return w > y.w;
    }
} a[N];
int f0[N], f1[N], f2[N], n;
void add(int x, int f[])
{
    for (; x <= 1e5; x += x & -x)
        f[x]++;
}
int query(int x, int f[])
{
    int retv = 0;
    for (; x; x -= x & -x)
        retv += f[x];
    return retv;
}
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        int l, w, c;
        cin >> l >> w >> c;
        a[i] = {l, w, c};
    }

    sort(a + 1, a + n + 1);

    ll ans = 0;
    for (int i = 1; i <= n; i++)
    {
        int l = a[i].l, w = a[i].w, c = a[i].c;
        if (c == 0)
        {
            ans = (ans + query(w - 1, f1) + query(w - 1, f2)) % mod;
            add(w, f0);
        }
        else if (c == 1)
        {
            ans = (ans + query(w - 1, f0) + query(w - 1, f2)) % mod;
            add(w, f1);
        }
        else if (c == 2)
        {
            ans = (ans + query(w - 1, f0) + query(w - 1, f1)) % mod;
            add(w, f2);
        }
    }

    cout << ans;
}


http://www.niftyadmin.cn/n/5845140.html

相关文章

(2025|Meta,LLM,token 压缩/挑选,离散潜在标记,VQ-VAE)混合潜在标记和文本标记以改进语言模型推理

Token Assorted: Mixing Latent and Text Tokens for Improved Language Model Reasoning 目录 1. 引言 2. 相关研究 2.1 Chain-of-Thought 推理 2.2 LLM 推理中的潜在空间 3. 方法 3.1 Token Assorted 方法 3.2 使用离散潜在标记进行推理 4. 实验 4.1 评测任务 4.2 …

ES6 Map 数据结构是用总结

1. Map 基本概念 Map 是 ES6 提供的新的数据结构&#xff0c;它类似于对象&#xff0c;但是"键"的范围不限于字符串&#xff0c;各种类型的值&#xff08;包括对象&#xff09;都可以当作键。Map 也可以跟踪键值对的原始插入顺序。 1.1 基本用法 // 创建一个空Map…

【网络安全学习笔记】传输层协议 UDP 与 TCP

&#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 目录 一&#xff1a;&#x1f525; 前置复盘 &#x1f98b; 传输层&#x1f98b; 再谈端口号&#x1f98b; 端口号范围划分&#x1f98b; 认识知名端口号 (Wel…

机器学习在癌症分子亚型分类中的应用

学习笔记&#xff1a;机器学习在癌症分子亚型分类中的应用——Cancer Cell 研究解析 1. 文章基本信息 标题&#xff1a;Classification of non-TCGA cancer samples to TCGA molecular subtypes using machine learning发表期刊&#xff1a;Cancer Cell发表时间&#xff1a;20…

书籍《新能源汽车动力电池安全管理算法设计》和《动力电池管理系统核心算法》脑图笔记

目录 一、阅读背景二、《新能源汽车动力电池安全管理算法设计》脑图笔记三、《动力电池管理系统核心算法》脑图笔记四、后记参考学习 一、阅读背景 如今身处新能源动力电池行业&#xff0c;欲对动力电池相关算法做一些了解&#xff0c;通过查找相关电子书app&#xff0c;最后找…

音频进阶学习十一——离散傅里叶级数DFS

文章目录 前言一、傅里叶级数1.定义2.周期信号序列3.表达式DFSIDFS参数含义 4.DFS公式解析1&#xff09;右边解析 T T T、 f f f、 ω \omega ω的关系求和公式N的释义求和公式K的释义 e j ( − 2 π k n N ) e^{j(\frac{-2\pi kn}{N})} ej(N−2πkn​)的释义 ∑ n 0 N − 1 e…

(文末提供数据集下载)ML.NET库学习001:基于PCA的信用卡异常检查之样本处理与训练

文章目录 (文末提供数据集下载)ML.NET库学习001&#xff1a;基于PCA的信用卡异常检查之样本处理与训练目标项目概述代码结构概述1. **主要类和文件**2. **命名空间和使用指令**3. **数据类 (TransactionObservation)**4. **主程序入口 (Main 方法)**5. **数据预处理 (DataPrepr…

操作系统端口占用排查与进程处理实用指南

操作系统端口占用排查与进程处理实用指南 在计算机网络的世界里&#xff0c;端口就像程序运行的“专属通道”。有时&#xff0c;这条通道可能会被其他程序意外“堵塞”&#xff0c;导致我们的程序无法正常启动。这可真让人头疼&#xff01;别担心&#xff0c;今天我们就来深入…