题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3262

第一道CDQ分治题!

看博客:https://www.cnblogs.com/Narh/p/9230515.html

CDQ分治意外地很好写啊,而且好厉害!膜拜CDQ!

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int const maxn=1e5+,maxm=2e5+;
int n,m,f[maxm],ans[maxn],tot;
struct N{int a,b,c,sum,num;}s[maxn],t[maxn];
bool cmp(N x,N y){return (x.a<y.a) || (x.a==y.a && x.b<y.b) || (x.a==y.a && x.b==y.b && x.c<y.c);}
bool cmp2(N x,N y){return x.b<y.b;}
bool ck(N x,N y){return (x.a==y.a) && (x.b==y.b) && (x.c==y.c);}
void add(int x,int v){for(;x<=m;x+=(x&-x))f[x]+=v;}// <=m 而非 <=n !
int query(int x){int ret=; for(;x;x-=(x&-x))ret+=f[x]; return ret;}
void cdq(int l,int r)
{
if(l==r)return;
int mid=((l+r)>>);
cdq(l,mid); cdq(mid+,r);
sort(t+l,t+mid+,cmp2); sort(t+mid+,t+r+,cmp2);
int p=l;
for(int i=mid+;i<=r;i++)
{
while(p<=mid && t[p].b<=t[i].b)add(t[p].c,t[p].num),p++;// <=
t[i].sum+=query(t[i].c);
}
for(int i=l;i<p;i++)add(t[i].c,-t[i].num);//撤销
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d%d%d",&s[i].a,&s[i].b,&s[i].c);
sort(s+,s+n+,cmp);
for(int i=,cnt;i<=n;i++)
{
cnt=;
while(ck(s[i],s[i+]))cnt++,i++;
t[++tot]=s[i]; t[tot].num=cnt;
}
cdq(,tot);
for(int i=;i<=tot;i++)ans[t[i].sum+t[i].num-]+=t[i].num;
for(int i=;i<n;i++)printf("%d\n",ans[i]);
return ;
}

bzoj3262 陌上花开——CDQ分治的更多相关文章

  1. bzoj3262陌上花开 cdq分治

    3262: 陌上花开 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 2794  Solved: 1250[Submit][Status][Discus ...

  2. bzoj3262陌上花开 cdq分治入门题

    Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...

  3. bzoj3262: 陌上花开(cdq分治+树状数组)

    3262: 陌上花开 题目:传送门 题解: %%%cdq分治 很强大的一个暴力...感觉比分块高级多了 这道题目就是一个十分经典的三维偏序的例题: 一维直接暴力排序x 二维用csq维护y 三维用树状数 ...

  4. bzoj3262 陌上花开 cdq分治(入门)

    题目传送门 思路:cdq分治处理偏序关系的模板题,主要就是学cdq分治吧,还在入门中. 代码其实也很好理解,记得树状数组操作的上限是 z的最大值,不是n的最大值,这个细节wa了好久. #include ...

  5. 【学术篇】bzoj3262 陌上花开. cdq分治入门

    花儿们已经很累了-- 无论是花形.颜色.还是气味, 都不是为了给人们摆出来欣赏的, 更不是为了当做出题的素材的, 她们并不想自己这些属性被没有生命的数字量化, 并不想和其它的花攀比, 并无意分出个三六 ...

  6. BZOJ3262:陌上花开(CDQ分治)

    Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量. 定义一朵花A比另一朵花B要美 ...

  7. [Bzoj3262]陌上花开(CDQ分治&&树状数组||树套树)

    题目链接 题目就是赤裸裸的三维偏序,所以用CDQ+树状数组可以比较轻松的解决,但是还是树套树好想QAQ CDQ+树状数组 #include<bits/stdc++.h> using nam ...

  8. P3810 陌上花开 CDQ分治

    陌上花开 CDQ分治 传送门:https://www.luogu.org/problemnew/show/P3810 题意: \[ 有n 个元素,第 i 个元素有 a_i. b_i. c_i 三个属性 ...

  9. 【BZOJ3262】陌上花开 cdq分治

    [BZOJ3262]陌上花开 Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义 ...

随机推荐

  1. PHP导出超大的CSV格式的Excel表方案

    场景和痛点 说明 我们工作场景都常会导出相关的excel数据,有时候需要大量的数据,10W,100W都有可能 我们现有方案都是直接利用phpexcel等类库来操作,phpexcel的load加载或是写 ...

  2. LeetCode 123. Best Time to Buy and Sell Stock III (stock problem)

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  3. Springboot开启事务

    参考资料: https://blog.csdn.net/message_lx/article/details/77584847

  4. github some rank

    github some rank http://githubrank.com/

  5. Linux读取网卡流量脚本

    #!/bin/bash #eval `date "+day=%d; month=%m; year=%Y; hour=%H; minute=%M second=%S"` #INSTF ...

  6. 数位dp 3943 二分法

    转载:http://blog.csdn.net/wdcjdtc/article/details/39177905 #include"cstdlib" #include"c ...

  7. Webstrom打开太慢

    让webstrom将安装包目录屏蔽,settings-搜索file types-在ignore file and folders加入node_modules目录,操作方式如下:

  8. Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数

    Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数: select trunc(1.23856789,2) from dual round(m,n) 可以四舍五入 trunc ...

  9. mysql实现oracle序列

    mysql实现oracle序列的方案1.建表,表结构为:drop table if exists sequence; create table sequence ( seq_name VARCHAR( ...

  10. Spring MVC中的拦截器/过滤器HandlerInterceptorAdapter的使用

    一般情况下,对来自浏览器的请求的拦截,是利用Filter实现的 而在Spring中,基于Filter这种方式可以实现Bean预处理.后处理. 比如注入FilterRegistrationBean,然后 ...