Day6 - K - 陌上花开 HYSBZ - 3262
Input
Output
包含N行,分别表示评级为0...N-1的每级花的数量。
Sample Input10 3 3 3 3 2 3 3 2 3 1 3 1 1 3 1 2 1 3 1 1 1 2 1 2 2 1 3 2 1 2 1
Sample Output3 1 3 0 1 0 1 0 0 1
思路:CDQ分治板子题,这题注意去重+排序时要三个关键字都用
using namespace std;
#define lowbit(x) ((x)&(-x))
typedef long long LL; const int maxm = 2e5+; int C[maxm], N, K, cnt[maxm]; void add(int x, int val) {
for(; x <= K; x += lowbit(x))
C[x] += val;
} int getsum(int x) {
int ret = ;
for(; x; x -= lowbit(x))
ret += C[x];
return ret;
} void clearr(int x) {
for(; x <= K; x += lowbit(x)) {
if(C[x] == ) break;
C[x] = ;
}
} struct Node {
int S, C, M, sum, ans;
} buf[maxm], res[maxm]; bool cmp_S(Node a, Node b) {
if(a.S == b.S && a.C == b.C) return a.M < b.M;
if(a.S == b.S) return a.C < b.C;
return a.S < b.S;
} 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+, k = L;
//左修改右查询
while(i <= mid && j <= R) {
if(res[i].C <= res[j].C) {
add(res[i].M, res[i].sum);
buf[k++] = res[i++];
} else {
res[j].ans += getsum(res[j].M);
buf[k++] = res[j++];
}
}
while(i <= mid)
buf[k++] = res[i++];
while(j <= R) {
res[j].ans += getsum(res[j].M);
buf[k++] = res[j++];
}
for(int t = L; t <= R; ++t) {
clearr(buf[t].M); // 清空树状数组
res[t] = buf[t];
}
} int main() {
scanf("%d%d", &N, &K);
for(int i = ; i < N; ++i) {
scanf("%d%d%d", &buf[i].S, &buf[i].C, &buf[i].M);
buf[i].ans = ;
}
sort(buf, buf+N, cmp_S);
// 去重
int now = , sz = ;
for(int i = ; i < N; ++i) {
now++;
if(buf[i].S != buf[i+].S || buf[i].C != buf[i+].C || buf[i].M != buf[i+].M) {
res[sz] = buf[i];
res[sz++].sum = now;
now = ;
}
}
CDQ(, sz-);
for(int i = ; i < sz; ++i)
cnt[res[i].ans+res[i].sum-]+=res[i].sum; //比他小的+和他一样的-自身(1)
for(int i = ; i < N; ++i)
printf("%d\n", cnt[i]);
return ;
}
Day6 - K - 陌上花开 HYSBZ - 3262的更多相关文章
- 陌上花开 HYSBZ - 3262 (CDQ分治)
陌上花开 HYSBZ - 3262 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量. 定义一朵花A比另 ...
- Day6 - L - Mokia HYSBZ - 1176
维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=2000000. Input 第 ...
- Day6 - C - Count HYSBZ - 1452 /1452: [JSOI2009]Count
Description 一个N*M的方格,初始时每个格子有一个整数权值,接下来每次有2个操作: 改变一个格子的权值 求一个子矩阵中某个特定权值出现的个数 Input 每一行有两个数字N,M 接下来 ...
- 【教程】简易CDQ分治教程&学习笔记
前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦! CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...
- POJ1195Mobile phones (从二维树状数组到cdq分治)
Suppose that the fourth generation mobile phone base stations in the Tampere area operate as follows ...
- django模型操作
Django-Model操作数据库(增删改查.连表结构) 一.数据库操作 1.创建model表
- 【BZOJ 3262】 3262: 陌上花开 (CDQ分治)
3262: 陌上花开 Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A ...
- bzoj 3262 陌上花开 - CDQ分治 - 树状数组
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...
- 「BZOJ」「3262」陌上花开
CDQ分治 WA :在solve时,对y.z排序以后,没有处理「y.z相同」的情况,也就是说可能(1,2,3)这个点被放到了(2,2,3)的后面,也就是统计答案在前,插入该点在后……也就没有统计到! ...
随机推荐
- C语言的变量存储方式和生存期
2020.2.28日,封城一个多月了,紧邻毕业期,我在家抽空学习一下C. 看到了变量的存储方式和生存期这一章节,下面就是我整理的内容 下面是用于理解静态局部变量这个概念所写的代码,主要是需要分析一下函 ...
- Spring Boot Security JWT 整合实现前后端分离认证示例
前面两章节我们介绍了 Spring Boot Security 快速入门 和 Spring Boot JWT 快速入门,本章节使用 JWT 和 Spring Boot Security 构件一个前后端 ...
- js中的原生Ajax和JQuery中的Ajax
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). js中的Ajax: 参数介绍: open(String method,Str ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:显示在 <abbr> 元素中的文本以小号字体展示,且可以将小写字母转换为大写字母
<!DOCTYPE html> <html> <head> <title>菜鸟教程(runoob.com)</title> <meta ...
- Android开发之显示分辨率及单位
Android 各种屏幕分辨率: VGA: Video Graphics Array,即:显示绘图矩阵,相当于640×480 像素: HVGA: Half-size VGA ...
- git rebase 与git merge 小结
git merge是用来合并两个分支的. $ git merge b 将b分支合并到当前分支 同样 $ git rebase b ,也是把 b分支合并到当前分支 ---------------- ...
- matlab学习 — 实现简单的爬虫
这里复杂的情况暂时不考虑..测试网址为pixiv的每日排行榜 = = url = 'https://www.pixiv.net/ranking.php?mode=daily' text = webre ...
- word无法切换中文输入法的解决方法
问题: 在word编辑文字的时候,莫名其妙地出现只能输入英文字母无法输入中文的现象,输入法状态条也不显示,而输入法是正常的(在其他编辑器中可正常输入汉字) 解决方法如下:word 2003:菜单工具- ...
- PLSQL Developer常用设置及快捷键
CSDN日报20170314--<40岁程序员真的要被淘汰了么?> 程序员2月书讯 [直播]用面向协议的思想简化网络请求 博客一键搬家活动开始啦 PLSQL Developer常用设置及快 ...
- Ideone:在线多语言编程执行器工具
Ideone:在线多语言编程执行器工具此网站提供40种编程语言以上, 能在线直接做编译和执行的动作,该工具是一款简易的编程测试工具,虽然不能替代专业版的工具,但是其功能非常全面. Ideone,一款在 ...