三维偏序模板题
| #include <bits/stdc++.h> |
| using ll = long long; |
| |
| int main() |
| { |
| std::ios::sync_with_stdio(false); |
| std::cin.tie(nullptr); |
| |
| int n,lim; |
| std::cin >> n >> lim; |
| |
| std::vector<std::array<int,5>> a(n ,{0}),ar; |
| for(int i = 0 ; i < n ; ++i) { |
| std::cin >> a[i][0] >> a[i][1] >> a[i][2]; |
| } |
| std::sort(a.begin(),a.end()); |
| |
| |
| for(int i = 0 ; i < n ; ++i) { |
| int cnt = 1; |
| while(i + 1 < n && a[i] == a[i + 1]) ++i,++cnt; |
| a[i][3] = cnt; |
| ar.push_back({a[i][0] , a[i][1] , a[i][2] , a[i][3] , 0}); |
| } |
| |
| std::vector<int> tr(lim + 1); |
| |
| auto lowbit = [&](int x) { |
| return x & -x; |
| }; |
| auto add = [&](int x , int v) { |
| while(x <= lim) { |
| tr[x] += v; |
| x += lowbit(x); |
| } |
| }; |
| auto query = [&](int x) { |
| int sum = 0; |
| while(x) { |
| sum += tr[x]; |
| x -= lowbit(x); |
| } |
| return sum; |
| }; |
| |
| int m = ar.size(); |
| |
| |
| |
| |
| |
| |
| std::function<void(int,int)> CDQ = [&](int l,int r) { |
| |
| if(l == r) return; |
| int mid = l + r >> 1; |
| CDQ(l , mid) , CDQ(mid + 1 , r); |
| |
| std::sort(ar.begin() + l , ar.begin() + mid + 1 , |
| [&](const std::array<int,5> &x , const std::array<int,5> &y){ |
| return x[1] < y[1]; |
| }); |
| std::sort(ar.begin() + mid + 1 , ar.begin() + r + 1 , |
| [&](const std::array<int,5> &x , const std::array<int,5> &y){ |
| return x[1] < y[1]; |
| }); |
| |
| int i = l , j = mid + 1; |
| while(j <= r) { |
| while(i <= mid && ar[j][1] >= ar[i][1]) { |
| add(ar[i][2] , ar[i][3]); |
| i++; |
| } |
| ar[j][4] += query(ar[j][2]); |
| j++; |
| } |
| |
| for(int k = l ; k < i ; ++k) |
| add(ar[k][2] , -ar[k][3]); |
| return; |
| }; |
| |
| CDQ(0 , m - 1); |
| |
| std::vector<int> f(n , 0); |
| for(int i = 0 ; i < m ; ++i) { |
| |
| |
| f[ar[i][3] + ar[i][4] - 1] += ar[i][3]; |
| } |
| |
| for(int i = 0 ; i < n ; ++i) { |
| std::cout << f[i] << '\n'; |
| } |
| |
| return 0; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现