「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生”中高端医疗保险(财险公司经营中高端医疗真的很厉害?真的是中高端医疗险 ...
随机推荐
- 对C转换说明符的误解以及关于数组的一些知识
事实上,scanf()函数中%c并非是用来输入单个字符的,而是用来输入一组字符的. 例如: ]; scanf("%3c",a); 其中“3”规定了输入数据的宽度,当然宽度为“1”的 ...
- 010.MySQL-Keepalived搭配脚本04
vim /etc/keepalived/check_MySQL.sh #!/bin/bash pkill keepalived
- error 1044 (42000):access denied for user ''@'localhost' to database 'quickapp' 解决方法
在虚拟机上重新创建一个数据库时,一直出现这个报错:error 1044 (42000):access denied for user ''@'localhost' to database 'quick ...
- hdu 3033(好题,分组背包)
I love sneakers! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 使用Maven搭建Struts2框架的开发环境
一.创建基于Maven的Web项目
- 4,EasyNetQ-Request Response
EasyNetQ还支持请求/响应消息传递模式. 这使得客户端/服务器应用程序变得容易,客户机/服务器应用程序在客户端向服务器发出请求,然后处理请求并返回响应. 与传统的RPC机制不同,EasyNetQ ...
- ArduinoYun教程之Arduino编程环境搭建
ArduinoYun教程之Arduino编程环境搭建 Arduino编程环境搭建 通常,我们所说的Arduino一般是指我们可以实实在在看到的一块开发板,他可以是Arduino UNO.Arduino ...
- BZOJ.3257.树的难题(树形DP)
题目链接 状态只与黑.白两点的颜色有关,于是用 \(f[x][i][j]\)表示当前以x为根节点,有\(i\)个黑点\(j\)个白点,使得x子树满足该条件的最小花费. 最后答案就是 \(min\{f[ ...
- Webpack 性能优化 (一)(使用别名做重定向)
前言 Webpack 是 OneAPM 前端技术栈中非常重要的一部分.它非常好用,假设你还不了解它,建议你阅读这篇Webpack 入门指迷,在 OneAPM 我们用它完毕静态资源打包.ES6 代码的转 ...
- Jack--10天学会IOS大纲;注意将图片放大观看!
第一天:磨刀霍霍期 耐得住性子好好熟悉和认识开发环境 ---------Jack/版权全部 认识开发环境 操作系统认识 Mac系统是苹果机专用系统.是基 ...