「BZOJ」「3262」陌上花开
CDQ分治
WA :在solve时,对y、z排序以后,没有处理「y、z相同」的情况,也就是说可能(1,2,3)这个点被放到了(2,2,3)的后面,也就是统计答案在前,插入该点在后……也就没有统计到!
sad
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std; const int N = ;
int n,k;
struct node{
int x,y,z,id;
}a[], b[];
bool operator != (node a,node b){
return a.x != b.x || a.y != b.y || a.z != b.z;
}
bool operator < (node a,node b){
return a.x < b.x || (a.x == b.x && a.y < b.y) || (a.x == b.x && a.y == b.y && a.z < b.z);
}
bool cmp(node a,node b){
return a.y < b.y || (a.y == b.y && a.z < b.z) || (a.y == b.y && a.z == b.z && a.id < b.id);
}
int ans[N], rank[N], num[N]; int val[N], vis[N], times;
inline int lowbit(int x){
return x & (-x);
}
void add(int pos, int v){
for(int i = pos; i <= k; i += lowbit(i))
if (vis[i] == times) val[i] += v;
else val[i] = v, vis[i] = times;
}
int query(int pos){
int ans = ;
for(int i = pos; i; i -= lowbit(i))
if (vis[i] == times)
ans += val[i];
return ans;
} void solve(int l,int r){
int mid = l + r >> ;
if (l < mid) solve(l, mid);
sort(a + l, a + r + , cmp);
times ++;
for(int i = l; i <= r; i ++)
if (a[i].id <= mid) add(a[i].z, num[a[i].id]);
else rank[a[i].id] += query(a[i].z);
sort(a + l, a + r + );
if (mid + < r) solve(mid + , r);
}
int main(){
freopen("3262.in", "r", stdin);
freopen("3262.out", "w", stdout);
scanf("%d%d",&n,&k);
for(int i = ; i <= n; i ++)
scanf("%d%d%d",&a[i].x, &a[i].y, &a[i].z);
sort(a + , a + n + );
for(int i = ; i <= n; i ++) b[i] = a[i];
int cnt = ;
for(int i = ; i <= n; i ++)
if (b[i] != b[i - ]) a[++ cnt] = b[i], num[cnt] = ;
else num[cnt] ++;
for(int i = ; i <= cnt; i ++) a[i].id = i, rank[i] = num[i] - ;
// for(int i = 1; i <= cnt; i ++) printf("%d %d %d num = %d\n",a[i].x, a[i].y, a[i].z, num[i]);
solve(, cnt);
// for(int i = 1; i <= cnt; i ++) printf("rank[%d] = %d\n",i,rank[i]);
for(int i = ; i <= cnt; i ++)
ans[rank[i]] += num[i];
for(int i = ; i < n; i ++) printf("%d\n",ans[i]);
return ;
}
「BZOJ」「3262」陌上花开的更多相关文章
- 「bzoj 4180: 字符串计数」
题目 真是一道好题 首先根据一个非常显然的贪心,如果给出了一个串\(S\),我们如何算最小操作次数呢 非常简单,我们直接把\(S\)拉到\(T\)的\(SAM\)上去跑,如果跑不动了就停下来,重新回到 ...
- 【BZOJ】【3262】陌上花开
树套树 orz zyf 这题的思路……算是让我了解到了树套树的一种用途吧 三维...第一维排序,第二维树状数组,第三维treap 具体实现就是每个树状数组的节点保存一颗treap,然后就可以查询了. ...
- 「BZOJ 4228」Tibbar的后花园
「BZOJ 4228」Tibbar的后花园 Please contact lydsy2012@163.com! 警告 解题思路 可以证明最终的图中所有点的度数都 \(< 3\) ,且不存在环长是 ...
- 「BZOJ 3645」小朋友与二叉树
「BZOJ 3645」小朋友与二叉树 解题思路 令 \(G(x)\) 为关于可选大小集合的生成函数,即 \[ G(x)=\sum[i\in c ] x^i \] 令 \(F(x)\) 第 \(n\) ...
- 「BZOJ 4502」串
「BZOJ 4502」串 题目描述 兔子们在玩字符串的游戏.首先,它们拿出了一个字符串集合 \(S\),然后它们定义一个字符串为"好"的,当且仅当它可以被分成非空的两段,其中每一段 ...
- 「BZOJ 4289」 PA2012 Tax
「BZOJ 4289」 PA2012 Tax 题目描述 给出一个 \(N\) 个点 \(M\) 条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点 \(1\) 到点 \( ...
- 「BZOJ 2534」 L - gap字符串
「BZOJ 2534」 L - gap字符串 题目描述 有一种形如 \(uv u\) 形式的字符串,其中 \(u\) 是非空字符串,且 \(v\) 的长度正好为 \(L\), 那么称这个字符串为 \( ...
- 「BZOJ 2956」模积和
「BZOJ 2956」模积和 令 \(l=\min(n,m)\).这个 \(i\neq j\) 非常不优雅,所以我们考虑分开计算,即: \[\begin{aligned} &\sum_{i=1 ...
- 众安「尊享e生」果真牛的不可一世么?
近日,具有互联网基因的.亏损大户(成立三年基本没盈利,今年二季度末亏损近4亿,你能指望它多厉害?).财产险公司—众安推出“尊享e生”中高端医疗保险(财险公司经营中高端医疗真的很厉害?真的是中高端医疗险 ...
随机推荐
- MyEclipse *的安装步骤和破解(32位和64位皆适用)(图文详解)
不多说,直接上干货! MyEclipse *的下载, 见 http://www.cnblogs.com/zlslch/p/5658195.html 简单说下, MyEclipse自己会带一个JDK,它 ...
- Java中public、protected、default和private的区别
public: 具有最大的访问权限,可以访问任何一个在classpath下的类.接口.异常等.它往往用于对外的情况,也就是对象或类对外的一种接口的形式. protected: 主要的作用就是用来保护子 ...
- web实践小项目<一>:简单日程管理系统(涉及html/css,javascript,python,sql,日期处理)
暑假自学了些html/css,javascript和python,苦于学完无处练手几乎过目即忘...最后在同学的建议下做了个简单日程管理系统.借第一版完成之际,希望能将实践期间犯过的错误和获得的新知进 ...
- zk节点扩充
zk节点扩充,从3个节点扩充为7个节点,需要先安装4个节点,在将4个节点的配置进行修改,然后在修改 原有的3个节点.至此完成对zk的扩充实现,在此做个记录. zk节点的顺序,与对应zk与所在序列保持一 ...
- [Android]对BaseAdapter中ViewHolder编写简化(转)
来自博客:http://www.cnblogs.com/tiantianbyconan/p/3642849.html 在Android项目中,经常都会用到ListView这个控件,而相应的Adapte ...
- 使用Xcode打包上传APP
1.打开xcode,进入product->Scheme->EditScheme,找到Archive,最上面的设备选择IOSDevice,在BuildConfiguration中选中Rele ...
- CentOS 安装 Python3
CentOS 7 默认安装 python 2.7.5 如图: 开始安装Python 3.6.3 1.下载Python3.6.3包: 拉到最下面,找到对应的包.复制下载链接地址: wget https ...
- HDU 4790 Just Random (2013成都J题)
Just Random Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- ShellExecuteA URLDownloadToFileA
ExeFile(Handle,nil,PChar('cmd.exe'),PChar('/c C:\123.exe'),nil,SW_SHOWNORMAL); c_md5 := 'cmd.exe /c ...
- 【iOS开发-91】GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
(1)GCD实现的同步异步.串行并行. --同步sync应用场景:用户登录,利用堵塞 --串行异步应用场景:下载等耗时间的任务 /** * 由于是异步.所以开通了子线程.可是由于是串行队列,所以仅仅须 ...