当前位置: 首页 > news >正文

详解Pku2352 数星星Stars以及star加强版

前言

在看之前建议先看一下

【学习笔记】详解树状数组-CSDN博客

一.数星星Stars

思路

可以不管其y坐标,只看x坐标,构成数列(1,5,7,3,5),坐标数列最开始为空

当加入1时,在它左边没有数字于等于它,所以输出0,然后在1这个位置加上1

当加入5时,在它左边有1个数字小于等于它,所以输出1 ,然后在5这个位置加上1

当加入7时,在它左边有2个数字小于等于它,所以输出2 ,然后在7这个位置加上1

当加入3时,在它左边有1个数字小于等于它,所以输出1 ,然后在3这个位置加上1

当加入5时,在它左边有3个数字小于等于它,所以输出3 ,然后在5这个位置加上1

我们可以利用树状数组进行统计计数。
以坐标的值代表数字的大小,坐标上打标志的次数代表某个数字是否出现过。

注意星座下标可能为0,但树状数组中下标不能为0,所以要所有星座整体右移一位。

注意:
1:是在某个坐标上加入某个数字
2:星星的个数与星星的坐标是两个概念
   本题中星星会有60000个,但坐标值只有32000

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,q,a[1000001],op,t,tt,c[1000001],maxn,ans[1000001],x[1000001],y;
int lowbit(int x)
{return (x & (-x));
}
void add(int p,int num)
{while(p <= maxn){c[p] += num;p += lowbit(p);}
}
int query(int p)
{int tmp = 0;while(p)   {   tmp += c[p];      p -= lowbit(p);   }   return tmp;
}
signed main()
{cin>>n;for(int i = 1;i <= n;i++){cin>>x[i]>>y;x[i]++;maxn = max(x[i],maxn);}for(int i = 1;i <= n;i++) add(x[i],1),cout<<query(x[i]) - 1<<endl;return 0;
}

二.star加强版

思路

如果星星的坐标值非常大,怎么办?
解决方案:离散化进行处理

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,q,a[1000001],g[1000001],op,t,tt,c[1000001],maxn,ans[1000001],x[1000001],y;
int lowbit(int x)
{return (x & (-x));
}
void add(int p,int num)
{while(p <= maxn){c[p] += num;p += lowbit(p);}
}
int query(int p)
{int tmp = 0;while(p)   {   tmp += c[p];      p -= lowbit(p);   }   return tmp;
}
signed main()
{cin>>n;for(int i = 1;i <= n;i++){cin>>g[i];x[i] = g[i];}sort(g + 1,g + 1 + n);int nt = unique(g + 1,g + n + 1) - g - 1;for(int i = 1;i <= n;i++) x[i] = lower_bound(g + 1,g + nt + 1,x[i]) - g;for(int i = 1;i <= n;i++) maxn = max(x[i],maxn);for(int i = 1;i <= n;i++) add(x[i],1),cout<<query(x[i]) - 1<<' ';return 0;
}

结语

如果您认为这篇文章对您有帮助,请点个赞再走吧!(●'◡'●)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从匿名内部类到Lambda再到方法引用
  • 53、PHP 实现归并排序
  • git学习准备阶段
  • 构建铁塔基站安全防护网:视频AI智能监控技术引领智慧化转型
  • java~IO流
  • OnlyOffice在线部署
  • C++箭头运算符->
  • 在线短剧APP开发,短剧市场的新赛道新盈利
  • 基于springboot+vue+uniapp的校园快递平台小程序
  • 程序员修炼之路:深入广泛的必修课程
  • 智慧景区导览系统小程序开发
  • Mac设置公钥
  • Linux:shell命令
  • 安装ROS(catkin_pkg找不到)
  • Tkinter简介与实战(1)
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 2017 年终总结 —— 在路上
  • bootstrap创建登录注册页面
  • express + mock 让前后台并行开发
  • Java 网络编程(2):UDP 的使用
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Service Worker
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 给Prometheus造假数据的方法
  • 浏览器缓存机制分析
  • 三分钟教你同步 Visual Studio Code 设置
  • 深入浅出Node.js
  • 温故知新之javascript面向对象
  • 延迟脚本的方式
  • 因为阿里,他们成了“杭漂”
  • 在Unity中实现一个简单的消息管理器
  • 关于Android全面屏虚拟导航栏的适配总结
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (javaweb)Http协议
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)计算机毕业设计ssm电影分享网站
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (十)c52学习之旅-定时器实验
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)负载均衡,回话保持,cookie
  • .Family_物联网
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET HttpWebRequest、WebClient、HttpClient
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .Net Winform开发笔记(一)