• cdoj 1256 昊昊爱运动 预处理


    昊昊爱运动

    Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

    昊昊喜欢运动

    NN天内会参加MM种运动(每种运动用一个[1,m][1,m]的整数表示)

    舍友有QQ个问题

    问昊昊第ll天到第rr天参加了多少种不同的运动

    Input

    输入两个数NN, MM (1N20001≤N≤2000, 1M1001≤M≤100);

    输入NN个数aiai表示在第i天昊昊做了第aiai类型的运动;

    输入一个数QQ(1Q1061≤Q≤106);

    输入QQ行 每行两个数 ll, rr(1lrn1≤l≤r≤n);

    Output

    一共QQ行

    每一行输出一个数 表示昊昊在第ll天到第rr天一共做了多少种活动

    Sample input and output

    Sample InputSample Output
    5 3
    1 2 3 2 2
    3
    1 4
    2 4
    1 5
    3
    2
    3

    Source

    第七届ACM趣味程序设计竞赛第二场(正式赛)
    思路:一眼不是离线树状数组,然后看到数据比较小,n*n*m超时;
       预处理n*n,Q*m可以水过;
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define pi (4*atan(1.0))
    const int N=2e3+10,M=4e6+10,inf=1e9+10;
    int sum[N][N];
    int a[N];
    int main()
    {
        int n,m,t;
        scanf("%d%d",&n,&m);
        for(int i=1; i<=n; i++)
            scanf("%d",&a[i]);
        for(int i=1; i<=n; i++)
        {
            for(t=1; t<=m; t++)
                sum[t][i]=sum[t][i-1];
            sum[a[i]][i]=sum[a[i]][i-1]+1;
        }
        int q;
        scanf("%d",&q);
        while(q--)
        {
            int l,r,ans=0;
            scanf("%d%d",&l,&r);
            for(int i=1;i<=m;i++)
            if(sum[i][r]-sum[i][l-1]>0)
            ans++;
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    将composer切换到国内镜像
    linux 查找删除
    国内外手机号码正则表达式
    git存储用户名和密码
    linux zip压缩文件忽略指定的文件夹
    css3
    magento2 定时任务
    SimpleXMLElement::addChild添加同级的空值xml节点
    Word Ladder
    Subsets II
  • 原文地址:https://www.cnblogs.com/jhz033/p/5837520.html
Copyright © 2020-2023  润新知