zoukankan      html  css  js  c++  java
  • bzoj 4397: [Usaco2015 dec]Breed Counting -- 前缀和

    4397: [Usaco2015 dec]Breed Counting

    Time Limit: 10 Sec  Memory Limit: 128 MB

    Description

    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.

    给定一个长度为N的序列,每个位置上的数只可能是1,2,3中的一种。

    有Q次询问,每次给定两个数a,b,请分别输出区间[a,b]里数字1,2,3的个数。

    Input

    The first line of input contains NN and QQ (1≤N≤100,000 1≤Q≤100,000).
    The next NN lines contain an integer that is either 1, 2, or 3, giving the breed ID of a single cow in the ordering.
    The next QQ lines describe a query in the form of two integers a,b (a≤b).

    Output

    For each of the QQ 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).

    Sample Input

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

    Sample Output

    3 2 1
    1 0 0
    2 0 1

    HINT

    #include<map>
    #include<cmath>
    #include<queue>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define ll long long
    #define N 100010
    char xB[1<<15],*xS=xB,*xTT=xB;
    #define getc() (xS==xTT&&(xTT=(xS=xB)+fread(xB,1,1<<15,stdin),xS==xTT)?0:*xS++)
    #define isd(c) (c>='0'&&c<='9')
    inline int read(){
        char xchh;
        int xaa;
        while(xchh=getc(),!isd(xchh));(xaa=xchh-'0');
        while(xchh=getc(),isd(xchh))xaa=xaa*10+xchh-'0';return xaa;
    }
    int n,q,x,y,s[N][4];
    int main()
    {
        n=read();q=read();
        for(int i=1;i<=n;i++)
        {
            x=read();
            s[i][1]=s[i-1][1];
            s[i][2]=s[i-1][2];
            s[i][3]=s[i-1][3];
            s[i][x]++;
        }
        while(q--)
        {
            x=read();y=read();
            printf("%d %d %d
    ",s[y][1]-s[x-1][1],s[y][2]-s[x-1][2],s[y][3]-s[x-1][3]);
        }
        return 0;
    }
  • 相关阅读:
    Redis简介 安装 注册服务
    Supervisor Linux守护进程
    .Net5 控制台 读取配置文件+依赖注入
    Linux Gdip
    Net Core封装 踩坑
    Apollo 公共Namespace使用json
    Visual Studio 2019修改项目名
    【面向对象】--静态类与非静态类的区别
    win10设置默认中英文符号【程序员标配】
    MySQL 数据库访问驱动-版本问题
  • 原文地址:https://www.cnblogs.com/lkhll/p/6783093.html
Copyright © 2011-2022 走看看