zoukankan      html  css  js  c++  java
  • bzoj4397【Usaco2015 Dec】Breed Counting

    4397: [Usaco2015 dec]Breed Counting

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 29  Solved: 25
    [Submit][Status][Discuss]

    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

    Source




    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<queue>
    #define F(i,j,n) for(int i=j;i<=n;i++)
    #define D(i,j,n) for(int i=j;i>=n;i--)
    #define ll long long
    #define pa pair<int,int>
    #define maxn 100005
    #define inf 1000000000
    using namespace std;
    int n,m,x,y,sum[4][maxn];
    inline int read()
    {
    	int x=0,f=1;char ch=getchar();
    	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
    	while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    	return x*f;
    }
    int main()
    {
    	n=read();m=read();
    	F(i,1,n)
    	{
    		F(j,1,3) sum[j][i]=sum[j][i-1];
    		x=read();
    		sum[x][i]++;
    	}
    	F(i,1,m)
    	{
    		x=read();y=read();
    		printf("%d %d %d
    ",sum[1][y]-sum[1][x-1],sum[2][y]-sum[2][x-1],sum[3][y]-sum[3][x-1]);
    	}
    }
    


  • 相关阅读:
    分数的表示和运算
    用户管理
    DML,DDL
    索引
    sql语句执行顺序
    伪劣
    序列
    视图
    完整性约束
    ASP.NET MVC学习笔记(二)登陆验证
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7103035.html
Copyright © 2011-2022 走看看