昊昊喜欢运动
他NN 天内会参加MM 种运动(每种运动用一个[1,m][1,m] 的整数表示)
舍友有QQ 个问题
问昊昊第ll 天到第rr 天参加了多少种不同的运动
Input
输入两个数NN , MM (1≤N≤20001≤N≤2000 , 1≤M≤1001≤M≤100 );
输入NN 个数aiai 表示在第i天昊昊做了第aiai 类型的运动;
输入一个数QQ (1≤Q≤1061≤Q≤106 );
输入QQ 行 每行两个数 ll , rr (1≤l≤r≤n1≤l≤r≤n );
Output
一共QQ 行
每一行输出一个数 表示昊昊在第ll 天到第rr 天一共做了多少种活动
Sample input and output
Sample Input | Sample 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 }
时间: 2024-12-28 11:53:56