题目描述
有n个格子,从左到右放成一排,编号为1-n。
共有m次操作,有3种操作类型:
1.修改一个格子的权值,
2.求连续一段格子权值和,
3.求连续一段格子的最大值。
对于每个2、3操作输出你所求出的结果。
实现思想
声明一个结构体存放输入命令,读取输入进入压进输入命令的vector,然后遍历vector内的命令,进行改变,加,求最大值得操作。
实现代码
#include <stdc++.h>
using namespace std;
struct operation{
int opt;
int first;
int end;
};
void change_value(int data[], int first, int end){
data[first] = end;
}
int add_value(int data[], int first, int end){
int sum = data[first];
for(int i = first+1; i <= end; i++){
sum = sum + data[i];
}
return sum;
}
int max_value(int data[], int first, int end){
int max_temp = data[first];
for(int i = first+1; i <= end; i++){
max_temp = (max_temp > data[i] ? max_temp:data[i]);
}
return max_temp;
}
int main()
{
int n, m;
cin >> n >> m;
int data[n+1];
for(int i = 1; i <= n; i++){
cin >> data[i];
}
vector<operation> opts;
operation opt;
for(int i = 0; i < m; i++){
cin >> opt.opt;
cin >> opt.first;
cin >> opt.end;
opts.push_back(opt);
}
for(vector<operation>::iterator it = opts.begin(); it != opts.end(); it++){
switch(it->opt){
case 1:
change_value(data, it->first, it->end);
break;
case 2:
cout << add_value(data, it->first, it->end) << endl;
break;
case 3:
cout << max_value(data, it->first, it->end) << endl;
break;
}
}
return 0;
}
运行截图
测试用例:
输入:
3 3
7
8
9
2 1 3
3 1 3
2 1 2
输出:
24
9
15
总结
迭代器访问vector,当vector是结构体的时候,用 it->opt 或者 (*it).opt 访问结构体内变量。如下图所示: