int main()
{
vector<int> candy;
string command;
int n,m;
void respond(char,int,int,int,vector<int> &);
cin>>n>>m;
while(n!=0&&m!=0)
{
getchar();
candy.assign(n,0);
while(m--!=0)
{
getline(cin,command);
char flag=command[0];
int first=atoi(&command[2]);
int second=atoi(&command[4]);
int third= (flag=='I')? atoi(&command[6]): -1;
respond(flag,first,second,third,candy);
}
cin>>n>>m;
candy.clear();
}
return 0;
}
void respond(char flag,int first,int second,int third,vector<int> &vec)
{
if(flag=='I')
{
for(;first<=second;++first)
{
vec[first-1]+=third;
}
}
else
{
int max_position=first;
for(++first;first<=second;++first)
{
if(vec[first-1]>vec[max_position-1])
{
max_position=first;
}
}
cout<<vec[max_position-1]<<endl;
vector<int>::iterator it=vec.begin();
vec.erase(it+max_position-1);
}
}
题目描述:
六一儿童节节又要到了,Roba又准备了好多好多的糖果,准备抓几只Loli。
Roba把糖果分成n堆。而Loli们可以提出两种要求:
(1)I a b c (1<=a<=b<=n, 0<c<=100),要求从第a堆到第b堆里的都加上c个糖果
(2)C a b (1<=a<=b<=n),问Roba从第a堆到第b堆里最多的那一堆的糖果数,
Roba会把当中糖果数最多的那一堆给那个Loli,如果有多个最多的,则取走编号小的那一堆
如果你是Roba,你能很快地回应Loli们的要求吗?
输入:
有多组测试数据,每组第一行为n和m (0< n,m <1e5),
表示有n堆,以下有m个要求。
接下来有m行,要求的格式见描述。
当n=m=0时结束程序。
注意,一开始每堆的糖果数均为0。
输出:
每遇到一个C请求,则输出一行,表示从a到b中最多的那一堆的糖果数
样例输入:
5 4
I 1 5 1
C 2 3
I 2 2 4
C 2 3
0 0
样例输出:
1
4
其它信息:
Contest19竞赛题目