当前位置: 首页 > news >正文

《P3810 【模板】三维偏序 / 陌上花开》

题目背景

这是一道模板题,可以使用 bitset,CDQ 分治,树套树,KD-Tree 等方式解决。

题目描述

有 n 个元素,第 i 个元素有 ai​,bi​,ci​ 三个属性,设 f(i) 表示满足 aj​≤ai​ 且 bj​≤bi​ 且 cj​≤ci​ 且 j=i 的 j 的数量。

对于所有 d∈[0,n),求 f(i)=d 的数量。

输入格式

第一行两个整数 n,k,表示元素数量和最大属性值。

接下来 n 行,每行三个整数 ai​,bi​,ci​,分别表示三个属性值。

输出格式

共 n 行,第 d+1 行表示 f(i)=d 的 i 的数量。

输入输出样例

输入 #1复制

10 3 3 3 3 2 3 3 2 3 1 3 1 1 3 1 2 1 3 1 1 1 2 1 2 2 1 3 2 1 2 1

输出 #1复制

3 1 3 0 1 0 1 0 0 1

说明/提示

对于所有数据,保证 1≤n≤105,1≤ai​,bi​,ci​≤k≤2×105。

代码实现:

#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int N=1e5+10; int n,m,tn; int sz[N],res[N],cnt[N],tr[2*N]; struct nd { int x,y,z; int id; bool operator != (const nd &t) const { return (x!=t.x||y!=t.y||z!=t.z); } }inp[N],dat[N],tmp[N]; inline int lowbit(int x) { return x&(-x); } inline void upd(int x,int c) { for(int i=x;i<=m;i+=lowbit(i)) tr[i]+=c; } inline int qry(int x) { int s=0; for(int i=x;i>=1;i-=lowbit(i)) s+=tr[i]; return s; } inline void cdq(int l,int r) { if(l==r) return; int mid=(l+r)/2,p=l,q=mid+1; cdq(l,mid),cdq(mid+1,r); for(int i=l;i<=r;i++) { if((p<=mid&&dat[p].y<=dat[q].y)||q>r) upd(dat[p].z,sz[dat[p].id]),tmp[i]=dat[p++]; else res[dat[q].id]+=qry(dat[q].z),tmp[i]=dat[q++]; } for(int i=l;i<=mid;i++) upd(dat[i].z,-sz[dat[i].id]); for(int i=l;i<=r;i++) dat[i]=tmp[i]; } inline bool cmp(nd a, nd b) { if(a.x==b.x) { if(a.y==b.y) return a.z<b.z; else return a.y<b.y; } else return a.x<b.x; } int main() { scanf("%d%d",&tn,&m); for(int i=1;i<=tn;i++) scanf("%d%d%d",&inp[i].x,&inp[i].y,&inp[i].z); sort(inp+1,inp+tn+1,cmp); for(int i=1;i<=tn;i++) { if(inp[i]!=inp[i-1]) dat[++n]=inp[i],dat[n].id=n; sz[n]++; } cdq(1,n); for(int i=1;i<=n;i++) cnt[res[dat[i].id]+sz[dat[i].id]-1]+=sz[dat[i].id]; for(int i=0;i<tn;i++) printf("%d\n",cnt[i]); return 0; }
http://www.jsqmd.com/news/334327/

相关文章:

  • AI方向的就业机会将集中在哪些岗位?春招应届生如何提前筹备?
  • 2026年 复印机打印机综合服务推荐榜:租赁销售维修批发一站式解决方案,专业设备与高效服务口碑之选 - 品牌企业推荐师(官方)
  • 申报国自然,如何打破信息差?
  • Avalonia MVVM
  • 基于Kubernetes的AI多租户系统部署实战
  • LazyLLM教程 | 第4讲:RAG项目工程化入门:从脚本走向模块化与可维护性
  • AI Agent规划能力实战:点餐支付售后多任务协同实现,面试官看了都点头!建议收藏
  • 毕业论文盲审在即,现在还没动笔?
  • LLM教程 | 第2讲:10分钟上手一个最小可用RAG系统
  • VLA Notes - kirin
  • 【笔记】【图】
  • 通过 C# 设置 Word 文档背景颜色、背景图
  • 通用 Agent 执行沙箱环境技术方案调研报告
  • LLM教程 | 第1讲:RAG原理解读:让检索增强生成不再是黑盒
  • 2026年圆形、防水与密封连接器厂家三维测评与选型指南 - 品致汇
  • 小白从零开始勇闯人工智能:计算机视觉初级篇(OpenCV补充(1))
  • 【SRC】抓包环境搭建与并发漏洞实战全解
  • 雷鸟创新背着10亿闯三关
  • Java开发者必看!40篇系统教程+完整代码,从入门到精通掌握AI应用开发(建议收藏)
  • PingApi接口开发平台4.0发布
  • 提示工程架构师:用Git思维做提示版控,效率直接拉满
  • 物流无人机承重模块详解
  • 揭秘ACPs/AIP的中心化架构:不是落后而是高效,附智能体跨域协作三种实现方式 | 技术必藏
  • Active Directory 端口列表
  • 玩手机看手机打电话检测数据集VOC+YOLO格式2332张2类别
  • Remote JVM Debug+cpolar 让 Java 远程调试超丝滑
  • 接口开发平台——接口编排使用
  • 【大学院-筆記試験練習:线性代数和数据结构(22)】
  • 大数据A_B测试流量分配策略:分层、互斥、动态分配实战指南
  • springboot快递公司物流信息管理系统设计与实现-开题报告-开题报告