打铁选手的 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文件读取漏 ...
随机推荐
- go程序基于阿里云CodePipeline的一次devops实践
背景 最近朋友有个项目代码托管用的码云,测试服务器(阿里云ECS)只有一台,三四个人开发,于是想基于阿里云的CodePipeline快速打造一套自动化cicd的流程,使用docker来进行多套环境部署 ...
- codewars--js--Valid Braces--正则、键值数组
问题描述: Write a function that takes a string of braces, and determines if the order of the braces is v ...
- Ajax0001:ajax介绍 JSON数据处理
- StarUML之九、starUML的一些特殊属性的说明
UML的扩充性机制允许你在控制的方式下扩充UML语言. 这一类的机制包括:stereotype,标记值.约束. Stereotype扩充了UML的词汇表,允许你创建新的建筑块,这些建筑块从已有的继承而 ...
- ES6 - 基础学习(5): 数值扩展
二进制和八进制数值表示法 ES6提供了二进制和八进制数值的新写法,分别前缀 0b(或0B). 0o(或0O)然后跟上二进制.八进制值即可. 二进制(Binary)表示法新写法:前缀 0b 或 0B. ...
- JS高阶编程技巧--惰性函数
在vue.react等框架大量应用之前,我们需要使用jQuery或者原生js来操作dom写代码,在用原生js进行事件绑定时,我们可以应用DOM2级绑定事件的方法,即:元素.addEventListen ...
- jsonArray jsonString list<Object> 之间转换
1.示例: package com.test.demo.pojo; import lombok.Data; import lombok.experimental.Accessors; /** * @p ...
- 【MVC+EasyUI实例】对数据网格的增删改查(上)
前言 此案例是针对之前做的一个小例子的后台框架的修改,从以前的三层框架改为现在的MVC框架,也是做了一次MVC和EasyUI的结合,分为2篇文章来阐述. 界面如下: 点击"添加"按 ...
- 吴裕雄--天生自然HADOOP操作实验学习笔记:hdfs分布式文件系统安装
实验目的 复习安装jdk 学习免密码登录 掌握安装配置hdfs集群的方法 掌握hdfs集群的简单使用和检查其工作状态 实验原理 1.hdfs是什么 hadoop安装的第一部分是安装hdfs,hdfs是 ...
- 【笔记】机器学习 - 李宏毅 - 3 - Bias & Variance
A more complex model does not always lead to better performance on testing data. Because error due t ...