打铁选手的 CDQ分治 刷题记录
BZOJ3262
- 模板题,三位偏序。
- 注意第一维排完序之后再给二三维排序的时候还是要考虑下第一维的:如果二三维都相等的话第一维小的要在前面
- 代码:
#include <bits/stdc++.h>
#define nmax 1000100
#define lowbit(x) x&(-x) using namespace std;
struct point{
int x,y,z;
bool operator == (const point& c) const { return (c.x==x)&&(c.y==y)&&(c.z==z); }
};
point in[nmax],a[nmax];
int n,k;
int p[nmax],c[nmax]={},v[nmax]={},an[nmax]={},fa[nmax]={}; bool cmp1(point c,point b){
if(c.x==b.x) return (c.y==b.y)?(c.z<b.z):(c.y<b.y);
else return c.x<b.x;
} bool cmp2(int b,int c){
if(a[b].y==a[c].y) return (a[b].z==a[c].z)?(a[b].x<a[c].x):(a[b].z<a[c].z);
return a[b].y<a[c].y; //第二次排序的时候也是要考虑a的
} inline void addv(int x,int t){
while(x<=k){ c[x]+=t; x+=lowbit(x); }
} inline int f(int x){
int ans=;
while(x>) { ans+=c[x]; x-=lowbit(x); }
return ans;
} void solve(int l,int r){
if(l==r) { an[l]+=(v[l]-); return; }
int ans=,mid=(l+r)/;
for (int i=l; i<=r; i++) p[i]=i;
sort(p+l,p+r+,cmp2);
for (int i=l; i<=r; i++) {
int id=p[i];
if(id<=mid) addv(a[id].z,v[id]); //在左边
else {
an[id]+=f(a[id].z); //在右边
// printf("now an[%d]=%d \n",id,an[id]);
}
}
//清空树状数组
for (int i=l; i<=r; i++) {
int id=p[i];
if(id<=mid) addv(a[id].z,(-)*v[id]);
}
solve(l,mid);
solve(mid+,r);
} int main(){
scanf("%d%d",&n,&k);
for (int i=; i<=n; i++) scanf("%d%d%d",&in[i].x,&in[i].y,&in[i].z);
sort(in+,in+n+,cmp1);
//去重
int cnt=,i=,j=;
while (i<=n){
a[++cnt]=in[i];
v[cnt]=;
while(in[i]==in[j]) { j++; v[cnt]++; }
i=j; j++;
}
//去重 over 要处理的数组是a
solve(,cnt);
for (int i=; i<=cnt; i++) fa[an[i]]+=v[i];
for (int i=; i<n; i++) printf("%d\n",fa[i]);
return ;
}030
打铁选手的 CDQ分治 刷题记录的更多相关文章
- PE刷题记录
PE刷题记录 PE60 / 20%dif 这道题比较坑爹. 所有可以相连的素数可以构成一张图,建出这张图,在其中找它的大小为5的团.注意上界的估算,大概在1W以内.1W内有1229个素数,处理出这些素 ...
- leetcode刷题记录--js
leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...
- Leetcode刷题记录(python3)
Leetcode刷题记录(python3) 顺序刷题 1~5 ---1.两数之和 ---2.两数相加 ---3. 无重复字符的最长子串 ---4.寻找两个有序数组的中位数 ---5.最长回文子串 6- ...
- 刷题记录:[HarekazeCTF2019]encode_and_encode
目录 刷题记录:[HarekazeCTF2019]encode_and_encode 一.知识点 JSON转义字符绕过 php伪协议 刷题记录:[HarekazeCTF2019]encode_and_ ...
- 刷题记录:[De1CTF 2019]Giftbox && Comment
目录 刷题记录:[De1CTF 2019]Giftbox && Comment 一.知识点 1.sql注入 && totp 2.RCE 3.源码泄露 4.敏感文件读取 ...
- 刷题记录:[强网杯 2019]Upload
目录 刷题记录:[强网杯 2019]Upload 一.知识点 1.源码泄露 2.php反序列化 刷题记录:[强网杯 2019]Upload 题目复现链接:https://buuoj.cn/challe ...
- 刷题记录:[XNUCA2019Qualifier]EasyPHP
目录 刷题记录:[XNUCA2019Qualifier]EasyPHP 解法一 1.error_log结合log_errors自定义错误日志 2.include_path设置包含路径 3.php_va ...
- 刷题记录:[DDCTF 2019]homebrew event loop
目录 刷题记录:[DDCTF 2019]homebrew event loop 知识点 1.逻辑漏洞 2.flask session解密 总结 刷题记录:[DDCTF 2019]homebrew ev ...
- 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System
目录 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System 知识点 1.padding-oracle attack 2.cbc字节翻转攻击 3.FFMpeg文件读取漏 ...
随机推荐
- python--虚拟环境的使用
下载virtualenv # pip3 install virtualenv 创建虚拟环境(自定义虚拟环境名称为Aechery_env) # virtualenv -p python3 Archery ...
- 此Flash Player 与您的地区不相容,请重新安装Adobe Flash Player问题解决
flash29老版本安装说明: 如果你是Google Chrome 54及以上版本,那么直接安装 install_flash_player_**_ppapi.exe 即可,Chrome 能识别加载,无 ...
- mybatis 自学笔记
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.本页作为自学整理资料,信息来源网络,侵权速联,但大部份经过自己测试.使用说明:本人测试用编辑软件eclipse_st ...
- 什么是AOP面向切面编程思想
一.什么是AOP? 1.AOP不是一种语言,是一种编程范式 常见的编程范式: 面向过程.面向对象.函数式编程.事件驱动编程等 2.AOP可以解决特定问题,不能解决所有问题. 3.是面向对象的补充,不是 ...
- UNIX环境高级编程-第三章习题
1,当读写磁盘文件时,read,write等函数确实是不带缓冲机制的吗?请说明原因. 答:所有磁盘I/O都要经过内核的块缓存区(即内核的缓冲区高速缓存).唯一例外的是对原始磁盘设备的I/O,但是我们不 ...
- k8s强制删除pod
有时候pod一直在Terminating kubectl delete pod xxx --force --grace-period=
- Spark应用开发调优要点总结
调试Spark应用性能的时候,首先应该理解spark是如何工作以及你的spark应用需要何种类型的资源.比如说,机器学习相关的spark应用更依赖cpu计算能力,ETL应用更依赖I/O能力,以此进行有 ...
- 定义了一个vue全局方法,不能再vuex中进行调用
你把函数定义在 Vue 的原型链上,只能在 Vue 的实例里才能取到这个方法. vue组件 是一个Vue 的实例,所以你当然能在这里调用到 ajax 方法. 而,vuex 只是一个 vue插件,在 v ...
- ansible基本使用(一)
ansible是什么? ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量 ...
- [CF1311C] Perform the Combo
Solution 前缀和搞一下即可 #include <bits/stdc++.h> using namespace std; #define int long long const in ...