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

【三维偏序】【分块】bzoj3262 陌上花开

裸的三维偏序。 对x坐标排序,y、z坐标分块。复杂度O(n*sqrt(n*log(n)))。代码很短。

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<algorithm>
 4 #include<vector>
 5 using namespace std;
 6 struct Point{int x,y,z,num;void Read(){scanf("%d%d%d",&x,&y,&z);}}p[100002];
 7 bool operator < (const Point &a,const Point &b){return a.x<b.x;}
 8 bool cmp (const Point &a,const Point &b){return a.y<b.y;}
 9 vector<int>b[400];
10 vector<Point>a[400];
11 int n,rank[100001],m,head,maxv[400],sum;
12 void makeblock()
13 {
14     int sz=(int)sqrt((double)n*(log((double)n)/log(2.0))); if(!sz) sz=1;
15     for(sum=1;sum*sz<n;sum++)
16       {
17         int R=sum*sz;
18         for(int i=(sum-1)*sz+1;i<=R;i++) p[i].num=sum;
19         maxv[sum]=p[R].y;
20       }
21     for(int i=(sum-1)*sz+1;i<=n;i++) p[i].num=sum;
22     maxv[sum]=p[n].y;
23 }
24 void insert(const Point &U)
25 {
26     b[U.num].insert(upper_bound(b[U.num].begin(),b[U.num].end(),U.z),U.z);
27     a[U.num].push_back(U);
28 }
29 int query(const Point &U)
30 {
31     int cnt=0,i;
32     for(i=1;i<=sum && maxv[i]<=U.y;++i)
33       cnt+=upper_bound(b[i].begin(),b[i].end(),U.z)-b[i].begin();
34     for(vector<Point>::iterator it=a[i].begin();it!=a[i].end();++it)
35       if((*it).z<=U.z&&(*it).y<=U.y) ++cnt;
36     return cnt;
37 }
38 int main()
39 {
40     scanf("%d%d",&n,&m);
41     for(int i=1;i<=n;i++) p[i].Read();
42     sort(p+1,p+n+1,cmp); makeblock();
43     sort(p+1,p+n+1);
44     for(int i=1;i<=n;i++)
45       {
46           if(p[i].x!=p[i-1].x) head=i;
47         if(p[i].x!=p[i+1].x)
48           {
49               for(int j=head;j<=i;j++) insert(p[j]);
50               for(int j=head;j<=i;j++) ++rank[query(p[j])-1];
51           }
52       }
53     for(int i=0;i<n;i++) printf("%d\n",rank[i]);
54     return 0;
55 }

转载于:https://www.cnblogs.com/autsky-jadek/p/4117500.html

相关文章:

  • Windows 7 Tips! --透明缓存(transparent caching)技术
  • tkinter之文件对话框
  • 不抛弃,不放弃,香巴拉半途之旅
  • 开启ylmf desktop ubuntu的pae支持
  • 日期转化为周次
  • 14套漂亮手机应用图标免费下载
  • Java学习路线图,Java学习计划建议
  • [转]谈谈个人网站建设和经营
  • 包装 request Demo
  • Android Resource介绍和使用
  • 《全中国最穷的小伙子发财日记》重庆老康日记 目录
  • jQuery----事件
  • 关于const记录类型全局变量赋初值的问题
  • Silverlight 4 Training Kit更新
  • 信息系统,分层不要过多,静态方法也可以考虑适当多用
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • ES6 ...操作符
  • ES6语法详解(一)
  • Git初体验
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • js对象的深浅拷贝
  • Linux各目录及每个目录的详细介绍
  • Meteor的表单提交:Form
  • React中的“虫洞”——Context
  • SOFAMosn配置模型
  • XForms - 更强大的Form
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 基于web的全景—— Pannellum小试
  • 技术:超级实用的电脑小技巧
  • 入门级的git使用指北
  • 优化 Vue 项目编译文件大小
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​比特币大跌的 2 个原因
  • #QT(TCP网络编程-服务端)
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (007)XHTML文档之标题——h1~h6
  • (175)FPGA门控时钟技术
  • (70min)字节暑假实习二面(已挂)
  • (function(){})()的分步解析
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)计算机毕业设计高校学生选课系统
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)负载均衡,回话保持,cookie
  • **PHP分步表单提交思路(分页表单提交)
  • .Net Core和.Net Standard直观理解
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET开发不可不知、不可不用的辅助类(一)
  • .NET企业级应用架构设计系列之结尾篇
  • .NET正则基础之——正则委托
  • .NET中winform传递参数至Url并获得返回值或文件