打铁选手的 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文件读取漏 ...
随机推荐
- F——宋飞正传(HDU3351)
题目: I’m out of stories. For years I’ve been writing stories, some rather silly, just to make simpl ...
- java循环示例
用while循环计算100之内的奇数和偶数和 public class Test{ public static void main(String[] args){ int sum=0; int num ...
- GNU make doc - 函数总结
$(value variable) 使用variable未展开状态的值 FOO = $(PATH) all: $(warning $(FOO)) $(warning $(value FOO)) #ou ...
- Golang中的Slice与数组
1.Golang中的数组 数组是一种具有固定长度的基本数据结构,在golang中与C语言一样数组一旦创建了它的长度就不允许改变,数组的空余位置用0填补,不允许数组越界. 数组的一些基本操作: 1.创建 ...
- smartforms设置表格脚标在最后一页显示
用户打印采购订单时,末尾计算一个合计金额,但是有多页时,合计显示在了每一页,现在希望合计项只显示在表格最后一行就可以. smartforms调整表格,将总计放在脚标内,设置脚标输出打印[在表结束处]即 ...
- SAP 事务代码 ME31K 报错 - 不含来自带工厂分配的供应商的物料的采购没有被定义 -
SAP 事务代码 ME31K 报错 - 不含来自带工厂分配的供应商的物料的采购没有被定义 - 近日收到业务团队的报错说,试图创建合同,报错如下: 不含来自带工厂分配的供应商的物料的采购没有被定义 这个 ...
- iOS 中事件的响应链和传递链
iOS事件链有两条:事件的响应链:Hit-Testing事件的传递链 响应链:由离用户最近的view向系统传递.initial view –> super view –> ….. –> ...
- redis中key键操作
keys */查看所有的key remoteSelf:1>select 0 "OK" remoteSelf:0>keys * 1) "SUBCRIBEMAP& ...
- 「Flink」使用Java lambda表达式实现Flink WordCount
本篇我们将使用Java语言来实现Flink的单词统计. 代码开发 环境准备 导入Flink 1.9 pom依赖 <dependencies> <dependency> < ...
- 一行代码解决MacBook Pro安装VSCode没有应用图标问题
笔者今天升级了VSCode,安装完后发现Dock(程序坞)没有VSCode的图标了,导致切换应用非常不方便. 具体情况就像下面这张图,VSCode明明开着,但是在Dock找不到VSCode了. 解决办 ...