【BZOJ3262】 陌上花开
Description
Input
Output
Sample Input
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
Sample Output
1
3
0
1
0
1
0
0
1
HINT
1 <= N <= 100,000, 1 <= K <= 200,000
1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<algorithm> 5 #define M 5000005 6 using namespace std; 7 int n,m,sz,tmp; 8 int root[200005],ans[100005],sum[100005]; 9 int size[M],ls[M],rs[M],v[M],w[M],rnd[M]; 10 struct node{int a,b,c;}a[100005]; 11 int lowbit(int x){return x&(-x);} 12 bool cmp(node a,node b){ 13 if (a.a==b.a&&a.b==b.b) return (a.c<b.c); 14 if (a.a==b.a) return (a.b<b.b); 15 return (a.a<b.a); 16 } 17 void updata(int x){size[x]=size[ls[x]]+size[rs[x]]+w[k];} 18 void lturn(int &k){int t=rs[k];rs[k]=ls[t];ls[t]=k;updata(k);updata(t);k=t;} 19 void rturn(int &k){int t=ls[k];ls[k]=rs[t];rs[t]=k;updata(k);updata(t);k=t;} 20 void ins(int &k,int num){ 21 if (!k){sz++;k=sz;rnd[k]=rand();v[k]=num;size[k]=w[k]=1;return;} 22 size[k]++; 23 if (v[k]==num) {w[k]++;return;} 24 else if (v[k]>num){ins(ls[k],num);if (rnd[ls[k]]<rnd[k]) rturn(k);} 25 else {ins(rs[k],num);if (rnd[rs[k]]<rnd[k]) lturn(k);} 26 } 27 28 void getrank(int k,int num){ 29 if (!k) return; 30 int l=ls[k],r=rs[k]; 31 if (v[k]==num) {tmp+=size[l]+w[k];return;} 32 else if (v[k]>num) getrank(l,num); 33 else if (v[k]<num){tmp+=size[l]+w[k];getrank(r,num);} 34 } 35 36 void ask(int x,int num){ 37 for (int i=x;i;i-=lowbit(i)) 38 getrank(root[i],num); 39 } 40 41 void insert(int x,int num){ 42 for (int i=x;i<=m;i+=lowbit(i)) 43 ins(root[i],num); 44 } 45 46 int main(){ 47 scanf("%d%d",&n,&m); 48 for (int i=1;i<=n;i++) scanf("%d%d%d",&a[i].a,&a[i].b,&a[i].c); 49 sort(a+1,a+n+1,cmp); 50 for (int i=1;i<=n;i++){ 51 if (a[i].a==a[i+1].a&&a[i].b==a[i+1].b&&a[i].c==a[i+1].c&&i!=n) sum[i+1]=sum[i]+1; 52 else{ 53 tmp=0; 54 ask(a[i].b,a[i].c); 55 ans[tmp]+=sum[i]+1; 56 } 57 insert(a[i].b,a[i].c); 58 } 59 for (int i=0;i<n;i++)printf("%d\n",ans[i]); 60 }
转载于:https://www.cnblogs.com/wuminyan/p/5146716.html
【BZOJ3262】 陌上花开相关推荐
- [BZOJ3262]陌上花开
[BZOJ3262]陌上花开 题目大意: \(n(n\le10^5)\)个三元组\((x,y,z)(x,y,z\le2\times10^6)\),求三位偏序. 思路: CDQ分分治套树状数组.需要注意 ...
- bzoj3262: 陌上花开
bzoj3262: 陌上花开 陌上花开 Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的 ...
- BZOJ3262 : 陌上花开
先去重,然后一维排序,二维分治,三维树状数组维护,$O(n\log^2n)$ #include<cstdio> #include<algorithm> #define N 10 ...
- BZOJ3262: 陌上花开(cdq分治)
Time Limit: 20 Sec Memory Limit: 256 MB Submit: 3627 Solved: 1705 [Submit][Status][Discuss] Descri ...
- Bzoj3262 陌上花开
Time Limit: 20 Sec Memory Limit: 256 MB Submit: 1755 Solved: 764 Description 有n朵花,每朵花有三个属性:花形(s).颜 ...
- CDQ解决一些三维偏序的问题
本来几天前就该记录的东西,硬生生被我拖到了现在,太懒了... 在cdq学习时,二维偏序已经解决了,无非就是先sort使第一维有序,然后再用cdq或者数据结构处理第二维.而三维偏序的时候呢,大佬的做法好 ...
- [总结]CDQ分治整体二分
从昨天到现在除了90%的颓废时间一直在研究一些分治的姿势,主要就是CDQ分治和整体二分. 首先推荐一些学习资料: 陈丹琦 <从 < Cash > 谈一类分治算法的应用> 许昊然 ...
- 【BZOJ-3262】陌上花开 CDQ分治(3维偏序)
3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 1439 Solved: 648 [Submit][Status][Discu ...
- BZOJ3262/Luogu3810 陌上花开 (三维偏序,CDQ)
一个下午的光阴之死,凶手是细节与手残. 致命的一枪:BIT存权值时: for(; x <= maxx; x += x&-x) t[x] += w;//for(; x <= n; x ...
最新文章
- 获取焦点时,利用js定时器设定时间执行动作
- hbase shell命令_Hbase的简单命令使用
- des java c_这个des加密,到底是用的哪种类型?
- Ubuntu E: 无法获得锁 /var/lib/dpkg/lock - open
- web开发兼容性测试工具
- 《高翔视觉slam十四讲》学习笔记 第三讲 三维空间刚体运动
- python人工智能文字识别_Python人工智能之图片识别,Python3一行代码实现图片文字识别...
- OOD1---wangwenmin
- HTML编辑器-HTML网页表单可视化在线编辑器插件大全
- 软件测试 查看网页打开时间,网页响应时间101(一)
- python jinja2_Python Jinja2使用方法
- 把已有项目转换成Visual Studio的解决方案
- git 提交两次commit到同一分支,被糅合为一次Marge Request的解决方法:cherry-pick
- 关于将LIUNX下的图形化操作倾向WINDOWS的几个东西
- PTA 7-2 构建下三角矩阵 (15分) 非得用vector
- Java27岁啦——一次争执引起的Java内卷生涯
- 【wordpress】搭建wordpress看这一篇就够了。
- Python等级考试中的一道简单的血压数据处理题
- 我很忙!你忙什么?瞎忙!
- 前昆仑游戏CEO陈芳出任游族网络联席总裁 周亚辉送祝福
热门文章
- java helloworld代码_java学习应用篇|逃不掉的HelloWorld
- C#设计模式之:抽象工厂模式与反射
- 洛谷——P3811 【模板】乘法逆元
- 函数名的应用(第一对象) 闭包 装饰器
- Maven中使用tomcat:run 出现错误 org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException...
- 利用反射实现对象调用方法
- leetcode - 4Sum
- 自定义ORM系列(三)工具雏形及基本用法
- SQL Server-创建表格、各种约束条件
- Android 5.0 SEAndroid下如何获得对一个内核节点的访问权限