大学生算法设计与编程挑战赛——mid
Description
新北山上有一排空地,uncle-lu想重些草上去,于是乎他将这一排空地分割成n块并标上号1…n。(这片空地上什么草都没有)
你完全想不到,uncle-lu个有E技能,他一口气可以在一段连续的区间内种上一株草。例如,他想在区间[2,5]上种草,一个E!那空地[2,5]上草数量分别+1。当然uncle-lu身体没那么好,他只能使用m次E技能。
当uncle-lu用完m次E技能,他有q个疑惑,他想知道某一块草地上的草的数量。
Input
第一行包含3个正整数 分别是 n,m,q
接下来m行中,每行包含2个正整数 x,y 表示 uncle-lu 一次的E技能 在[x,y]区间内种一株草(保证x≤y)
第m+2行,包含q个正整数 表示每次uncle-lu询问的草地.
Output
输出包含q行,对于每次询问,输出询问答案
完整代码:
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int n,m,q;
cout<<"请输入n(草地数),m(技能数),q(查询书):"<<endl;
cin>>n>>m>>q;
vector<int> grass(n);
vector<int> grass_on(q);
for(int i=0;i<n;i++){
grass[i]=0;
}
for(int i=0;i<m;i++){
int x,y;
cout<<"技能区间[x,y]:"<<endl;
cin>>x>>y;
for(int j=x-1;j<=y-1;j++){
grass[j]++;
}
}
cout<<"请输入查询草地位置:"<<endl;
for(int i=0;i<q;i++){
cin>>grass_on[i];
}
cout<<endl;
for(int i=0;i<q;i++){
cout<<"第"<<grass_on[i]<<"块草地数量:"<<grass[grass_on[i]-1]<<" ";
}
return 0;
}