码迷,mamicode.com
首页 > 其他好文 > 详细

CDOJ 1256 二维前缀和处理

时间:2016-07-16 06:28:42      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

昊昊喜欢运动

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

Hint

Source

第七届ACM趣味程序设计竞赛第二场(正式赛)
 
题意:询问任意区间内 参加活动的种类
 
题解:二维前缀和 
        cout T
 1 #include<bits/stdc++.h>
 2 #define ll __int64
 3 #define mod 1e9+7
 4 #define PI acos(-1.0)
 5 #define bug(x) printf("%%%%%%%%%%%%%",x);
 6 using namespace std;
 7 int n,m;
 8 int a[2005];
 9 int mp[2005][105];
10 int l,r;
11 int q;
12 int main()
13 {
14     scanf("%d %d",&n,&m);
15     int exm=0;
16     for(int i=1;i<=n;i++)
17     {
18         for(int j=1;j<=m;j++)
19         {
20             mp[i][j]=mp[i-1][j];
21         }
22         scanf("%d",&a[i]);
23         mp[i][a[i]]++;
24     }
25     scanf("%d",&q);
26     for(int i=1;i<=q;i++)
27     {
28         scanf("%d %d",&l,&r);
29         int flag=0;
30         for(int j=1;j<=m;j++)
31         {
32             if((mp[r][j]-mp[l-1][j])>0)
33                 flag++;
34         }
35         printf("%d\n",flag);
36     }
37 
38     return 0;
39 }

 

CDOJ 1256 二维前缀和处理

标签:

原文地址:http://www.cnblogs.com/hsd-/p/5675060.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!