Breed Counting(水?)

Breed Counting(水?)2386 BreedCountin 时间限制 nbsp 1Sec nbsp nbsp 内存限制 nbsp 64MB 提交 nbsp 81 nbsp nbsp 解决 nbsp 31 提交 状态 讨论版 题目描述 FarmerJohn sNcows conveniently N areallstandi theyseemtodo

2386: Breed Counting

时间限制: 1 Sec  
内存限制: 64 MB

提交: 81   解决: 31
[ 提交][ 状态][ 讨论版]






题目描述

Farmer John’s N cows, conveniently numbered 1…N, are all standing in a row (they seem to do so often that it now takes very little prompting from Farmer John to line them up). Each cow has a breed ID: 1 for Holsteins, 2 for Guernseys, and 3 for Jerseys. Farmer John would like your help counting the number of cows of each breed that lie within certain intervals of the ordering. 




输入

The first line of input contains N and Q (1≤N≤100,000, 1≤Q≤100,000).


The next N  lines contain an integer that is either 1, 2, or 3, giving the breed ID of a single cow in the ordering.

The next Q  lines describe a query in the form of two integers a,b (a≤b). 











输出

For each of the Q queries (a,b), print a line containing three numbers: the number of cows numbered a…b that are Holsteins (breed 1), Guernseys (breed 2), and Jerseys (breed 3). 




样例输入

6 3 2 1 1 3 2 1 1 6 3 3 2 4 

样例输出

3 2 1 1 0 0 2 0 1

比赛时直接用线段树开了3个数组做的。

其实还有更好的方法。

通过记录每个位置的前缀和,查询的时候直接输出 num[r] – num[l-1],就行了,就是这一段的和。 赞一个给力的孙学弟

源代码

#include 
  
    #include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         using namespace std; #define maxn #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define mem(a,x) memset(a,x,sizeof(a)) int num1[maxn]; int num2[maxn]; int num3[maxn]; int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF){ int tmp; mem(num1,0); mem(num2,0); mem(num3,0); for(int i=1;i<=n;i++){ num1[i] += num1[i-1]; num2[i] += num2[i-1]; num3[i] += num3[i-1]; scanf("%d",&tmp); if(tmp == 1) num1[i]++; if(tmp == 2) num2[i]++; if(tmp == 3) num3[i]++; } while(m--){ int a,b;scanf("%d%d",&a,&b); printf("%d ",num1[b] - num1[a-1]); printf("%d ",num2[b] - num2[a-1]); printf("%d\n",num3[b] - num3[a-1]); } } return 0; } 
        
       
      
     
    
  




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214695.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午3:39
下一篇 2026年3月18日 下午3:40


相关推荐

  • 多元Huffman编码

    多元Huffman编码一 实验要求与目的 1 熟悉贪心算法的基本原理与适用范围 2 使用贪心算法编程给出哈夫曼编码 二 实验内容编程实现哈夫曼编码 并给出测试实例三 实现思想运用优先队列的数据结构 我们在考虑 k 元 Huffman 编码时 最大费用肯定是二叉的情况 因为深度越大 被加的次数会越多 另外 优先队列中数值大的优先级越高 但是最小费用和就是 k 叉了 与二叉不同的时 我们可以这样考虑 如果最后一

    2026年3月17日
    2
  • rpc服务器不可用自动重启,出现RPC服务器不可用的解决方法

    rpc服务器不可用自动重启,出现RPC服务器不可用的解决方法出现 RPC 服务器不可用的解决方法 RPC 服务器 是指 RemoteProced 中文释义为 RFC 1831 远程过程调用协议 一种通过网络从远程计算机程序上请求服务 而不需要了解底层网络技术的协议 当 RPC 服务出现问题的时候 我们打开很多程序都会出现 PRC 服务器不可用的情况 RPC 服务器不可用有以下几个可能及解决方法 一 RPC 服务没有启动或正常启动 我们可以通过

    2026年3月17日
    2
  • Java正则表达式语法规则(具体)

    Java正则表达式语法规则(具体)Java正则表达式语法规则(具体)

    2022年7月19日
    14
  • 方法重载和重写的区别[通俗易懂]

    方法重载和重写的区别[通俗易懂]一、方法重载(overload)重载方法的定义是在同一个类中,某方法允许存在一个以上的同名方法,只要它们的参数列表不同即可。方法重载的作用:屏蔽了同一功能的方法由于参数不同所造成方法名称不同。方法重载判断原则: “两同一不同”两同:同类中,方法名相同;一不同:方法参数列表不同(参数类型、参数个数、参数顺序);       只要参数类型,参数个数,参数顺序有一个不同,参数列表就不同.注意:方法重载和…

    2022年6月13日
    30
  • IOS安全、逆向、反编译1-越狱知识讲解[通俗易懂]

    IOS安全、逆向、反编译1-越狱知识讲解[通俗易懂]之前开发了一个对安全性要求比较高的APP,所以对安全、逆向和反编译有了一些认识,最近有时间就想系统的把这些知识做一个整理。今天就开始把我的学习过程记录下来。iOS越狱环境搭建在学习iOS越狱之前,我们当然需要一台iOS设备,由于现在基本上都是64位系统为主,所以最好是使用ARM64架构的设备,因此首先我们的手机至少需要iPhone5S或者之后的iPhone设备,平板至少是iPadAir、…

    2022年5月8日
    93
  • 统计假设检验之显著性检验(significance test)

    统计假设检验之显著性检验(significance test)转载于关于显著性检验 你想要的都在这儿了 基础篇 无论你从事何种领域的科学研究还是统计调查 显著性检验作为判断两个乃至多个数据集之间是否存在差异的方法被广泛应用于各个科研领域 笔者作为科研界一名新人也曾经在显著性检验方面吃过许多苦头 后来醉心于统计理论半载有余才摸到显著性检验的皮毛 也为显著性检验理论之精妙 品种之繁多 逻辑之严谨所折服 在此 特写下这篇博文 以供那些仍然挣扎在显著性检验

    2026年2月20日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号