3262: 陌上花开
3262: 陌上花开
Time Limit: 20 Sec Memory Limit: 256 MB
Submit: 1423 Solved: 640
[ Submit][ Status][ Discuss]
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
Source
树套树 CDQ分治
[ Submit][ Status][ Discuss]
排序一维
树状数组一维
线段树一维
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;const int maxn = 2E5 + 20;
const int T = 100;struct data{int a,b,c,Num;data(){}data(int a,int b,int c,int Num): a(a),b(b),c(c),Num(Num){}bool operator < (const data &B) const {return a < B.a;}
}f[maxn];int n,m,cnt,Root[maxn],lc[maxn*T],rc[maxn*T],c[maxn*T],rank[maxn],ans[maxn];int Getlc(int o) {return lc[o]?lc[o]:lc[o] = ++cnt;}
int Getrc(int o) {return rc[o]?rc[o]:rc[o] = ++cnt;}int Query(int o,int l,int r,int ql,int qr)
{if (ql <= l && r <= qr) return c[o];if (!o) return 0;int mid = (l + r) >> 1,ret = 0;if (ql <= mid) ret += Query(lc[o],l,mid,ql,qr);if (qr > mid) ret += Query(rc[o],mid + 1,r,ql,qr);return ret;
}void Insert(int o,int l,int r,int pos)
{if (l == r) {++c[o];return;}int mid = (l + r) >> 1;if (pos <= mid) Insert(Getlc(o),l,mid,pos);else Insert(Getrc(o),mid + 1,r,pos);c[o] = c[lc[o]] + c[rc[o]];
}int getint()
{char ch = getchar();int ret = 0;while (ch < '0' || '9' < ch) ch = getchar();while ('0' <= ch && ch <= '9')ret = ret*10 + ch - '0',ch = getchar();return ret;
}int main()
{#ifdef DMCfreopen("DMC.txt","r",stdin);#endifn = getint(); m = getint();for (int i = 1; i <= n; i++) {int a,b,c;a = getint();b = getint();c = getint();f[i] = data(a,b,c,i);}sort(f + 1,f + n + 1);int L = 1;for (int i = 1; i <= n + 1; i++) {if (f[i].a != f[i-1].a && i > 1) {for (int j = L; j < i; j++) {for (int l = f[j].b; l > 0; l -= l&-l)rank[f[j].Num] += Query(Root[l],1,m,1,f[j].c);--rank[f[j].Num];}L = i;}if (i == n + 1) break;for (int j = f[i].b; j <= m; j += j&-j) {if (!Root[j]) Root[j] = ++cnt;Insert(Root[j],1,m,f[i].c);}}for (int i = 1; i <= n; i++) ++ans[rank[i]];for (int i = 0; i < n; i++)printf("%d\n",ans[i]);return 0;
}
3262: 陌上花开相关推荐
- bzoj 3262: 陌上花开(cdq分治)
3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 2433 Solved: 1087 [Submit][Status][Disc ...
- BZOJ 3262 陌上花开
3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 2590 Solved: 1159 [Submit][Status][Disc ...
- BZOJ - 3262 陌上花开
3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 5433 Solved: 2623 [Submit][Status][Disc ...
- bzoj 3262: 陌上花开
3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 5800 Solved: 2804 [Submit][Status][Discus ...
- bzoj 3262 陌上花开
本质是一个三维偏序,一位排序后cdq分治,一维在子函数里排序,一维用树状数组维护. 把三维相等的合并到一个里面. 1 #include<iostream> 2 #include<cs ...
- 【BZOJ-3262】陌上花开 CDQ分治(3维偏序)
3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 1439 Solved: 648 [Submit][Status][Discu ...
- 一句话题解(20170801~20170125)
8.1 bzoj 4720 noip2016 换教室 floyd预处理+期望(薛定谔的猫) bzoj 4318 OSU! 三次函数期望值 从一次.二次推得 8.2 bzoj 1076 状压+期望DP ...
- 分治、CDQ分治小结
分治.CDQ分治小结 A Summary for Divide and Conquer 0. Anouncement 本文部分图片以及部分内容来自互联网,内容过多就不一一注明出处了,冒犯之处还请海涵. ...
- 分治、CDQ分治小结(need to be updated)
分治.CDQ分治小结 A Summary for Divide and Conquer 0. Anouncement 本文部分图片以及部分内容来自互联网,内容过多就不一一注明出处了,冒犯之处还请海涵. ...
最新文章
- Cocos2d-x 截屏功能集成
- react hook——你可能不是“我”所认识的useEffect
- c语言编制编程语言,C语言CGI编程入门(一)
- 人工智能切入垂直领域 风口已至?
- MariaDB数据库介绍之一、备份(mysqldump、lvm2快照、xtrabackup)
- mysql常用的语句_MySQL常用语句集锦
- (转)比特币该如何扩容
- 苹果申请新专利,iPhone或取消刘海设计
- 欧美相关出口企业要注意了!
- 俄语转化成拉丁字母java_java - 如何在Java String中将西里尔字母转换为英语拉丁语? - SO中文参考 - www.soinside.com...
- Android开发新技术
- c++ 字母a~z升序排列编号 字典序问题 递归
- MacbookPro电脑Hosts文件位置在哪里修改
- 电机保护器ARD3T 过载、断相、不平衡、欠载、接地/漏电、堵转等保护功能
- 微服务实战|微服务网关Zuul入门与实战
- 仿微信、QQ聊天页面软键盘遮挡聊天对话的解决办法
- LTE调度算法(下行)
- 项目中的Ulua使用感想
- python制作图片数据集 h5py_python库——h5py入门讲解
- 电影分级USA、HK
热门文章
- JAVA的JDBC连接MYSQL数据库并查询数据
- SR-TE Policy(思科)----explicit path 实验
- 【Python稀疏矩阵】
- 1098:质因数分解
- StringUtils. indexOf 用法
- 清除linux系统日志文件,LINUX系统日志的清除
- CF 1617C. Paprika and Permutation
- Implicit function
- Erlang报错Crash dump is being written to: erl_crash.dump...done
- 把一个字符串分割成数组 php_PHP怎么将字符串拆分成数组