bzoj3262: 陌上花开(cdq分治+树状数组)
3262: 陌上花开
题目:传送门
题解:
%%%cdq分治
很强大的一个暴力...感觉比分块高级多了
这道题目就是一个十分经典的三维偏序的例题:
一维直接暴力排序x
二维用csq维护y
三维用树状数组来搞
最后ans处理答案,注意:全部值相等,相互之间也算自己更加漂亮
代码:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
struct flower
{
int x,y,z,f,tot;
}a[],ba[];int n,m,len;
void ins(int x,int y,int z)
{
len++;
a[len].x=x;a[len].y=y;a[len].z=z;
a[len].tot=;a[len].f=;
}
bool cmp(flower n1,flower n2)
{
if(n1.x!=n2.x)return n1.x<n2.x;
if(n1.y!=n2.y)return n1.y<n2.y;
return n1.z<n2.z;
}
void qtt()
{
int x,y,z;
for(int i=;i<=n;i++)
scanf("%d%d%d",&x,&y,&z),ins(x,y,z);
sort(a+,a+len+,cmp);
n=;
for(int i=;i<=len;i++)
if(a[n].x==a[i].x && a[n].y==a[i].y && a[n].z==a[i].z)
a[n].tot++;
else
a[++n]=a[i];
} int s[];
int lowbit(int x){return x&-x;}
void add(int x,int k)
{
while(x<=m)
{
s[x]+=k;
x+=lowbit(x);
}
}
int getsum(int x)
{
int ans=;
while(x)
{
ans+=s[x];
x-=lowbit(x);
}
return ans;
} void cdq(int l,int r)
{
if(l==r)return ;
int mid=(l+r)/;
cdq(l,mid);cdq(mid+,r); int i=l,j=mid+,p=l;
while(i<=mid && j<=r)
{
if(a[i].y<=a[j].y)add(a[i].z,a[i].tot),ba[p++]=a[i++];
else a[j].f+=getsum(a[j].z),ba[p++]=a[j++];
}
while(i<=mid)add(a[i].z,a[i].tot),ba[p++]=a[i++];
while(j<=r)a[j].f+=getsum(a[j].z),ba[p++]=a[j++]; for(int i=l;i<=mid;i++)add(a[i].z,-a[i].tot); for(int i=l;i<=r;i++)a[i]=ba[i];
}
int ans[];
int main()
{
scanf("%d%d",&n,&m);
qtt(); memset(s,,sizeof(s));
cdq(,n); memset(ans,,sizeof(ans));
for(int i=;i<=n;i++)ans[a[i].f+a[i].tot-]+=a[i].tot;
for(int i=;i<len;i++)printf("%d\n",ans[i]);
return ;
}
bzoj3262: 陌上花开(cdq分治+树状数组)的更多相关文章
- [Bzoj3262]陌上花开(CDQ分治&&树状数组||树套树)
题目链接 题目就是赤裸裸的三维偏序,所以用CDQ+树状数组可以比较轻松的解决,但是还是树套树好想QAQ CDQ+树状数组 #include<bits/stdc++.h> using nam ...
- 【bzoj3262】陌上花开 CDQ分治+树状数组
题目描述 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当且仅当Sa&g ...
- bzoj 3262 陌上花开 - CDQ分治 - 树状数组
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...
- BZOJ_3262_陌上花开_CDQ分治+树状数组
BZOJ_3262_陌上花开_CDQ分治+树状数组 Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的 ...
- 【BZOJ4553】[Tjoi2016&Heoi2016]序列 cdq分治+树状数组
[BZOJ4553][Tjoi2016&Heoi2016]序列 Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能 ...
- BZOJ 1176 Mokia CDQ分治+树状数组
1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1854 Solved: 821[Submit][St ...
- 【bzoj2225】[Spoj 2371]Another Longest Increasing CDQ分治+树状数组
题目描述 给定N个数对(xi, yi),求最长上升子序列的长度.上升序列定义为{(xi, yi)}满足对i<j有xi<xj且yi<yj. 样例输入 8 1 3 3 2 1 1 4 5 ...
- BZOJ 2683 简单题 cdq分治+树状数组
题意:链接 **方法:**cdq分治+树状数组 解析: 首先对于这道题,看了范围之后.二维的数据结构是显然不能过的.于是我们可能会考虑把一维排序之后还有一位上数据结构什么的,然而cdq分治却可以非常好 ...
- LOJ3146 APIO2019路灯(cdq分治+树状数组)
每个时刻都形成若干段满足段内任意两点可达.将其视为若干正方形.则查询相当于求历史上某点被正方形包含的时刻数量.并且注意到每个时刻只有O(1)个正方形出现或消失,那么求出每个矩形的出现时间和消失时间,就 ...
随机推荐
- iOS_6_ToolBar+xib+红楼梦
终于效果图 BeyondViewController.h // // BeyondViewController.h // 6_ToolBar // // Created by beyond on 14 ...
- c#自己实现线程池功能(二)
介绍 在上一篇c#自己实现线程池功能(一)中,我们基本实现了一个能够执行的程序.而不能真正的称作线程池.因为是上篇中的代码有个致命的bug那就是没有任务是并非等待,而是疯狂的进行while循环,并试图 ...
- Caffe C++API 提取任意一张图片的特征系列二----MemoryData
介绍一种更加灵活的方法,用MemoryData层输入数据,可以直接用opencv接口读入我们的图片再添加的网络中. 第一个问题:仍然是工程建立问题,提示卷积层或其他层没有注册,解决方法与上一篇博客一 ...
- notepad++ 插件推荐——快速定位文件
介绍Notepad++的文章很多,我这里就不赘述了.简言之,是一个轻便的文本编辑工具.结合丰富的插件,可以实现很多功能,可以成为一个轻量级的IDE,用来做脚本开发非常合适. 这里介绍几个插件可以用来进 ...
- php的分页代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- BZOJ 2957 分块
思路: 记录每栋楼楼顶与原点连线的斜率 那么一栋楼可见当且仅当前面所有楼的斜率都小于这栋楼 将n栋楼分为√(0.5*n*logn)块 每一块内维护一个单调上升子序列(注意不是LCS) 比如说4 1 2 ...
- MySQL-数据库安装及基本SQL语句
一数据库基本概念 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在 ...
- C#追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件
C#追加文件 StreamWriter sw = File.AppendText(Server.MapPath(".")+"\\myText.txt"); sw ...
- django patch 解决 ["'15428560000' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."]
__init__.py import datetime from django.apps import AppConfig from django.db.models.fields import Da ...
- git--客户端管理工具初步使用
说点废话哈 小白一枚, 今年3月份进入自己的第一家公司, 开始成为前端中的一份子,好在公司里有位和我一同进来的一位老哥带着我,从老哥身上学到的知识不多,(因为和老哥只相处工作了三个月,因为家里的事情, ...