|
||||||||||
免费送气球Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1358 Accepted Submission(s): 248 Problem Description 又到了GDUT一年一度的程序设计竞赛校赛的时间啦。同学们只要参加校赛,并且每解出一道题目就可以免费获得由ACM协会和集训队送出的气球一个。听到这个消息,JMC也想参加免费拿气球。可是,由于JMC太菜了而被禁止参赛,于是他找到你想让你帮忙参加比赛,可以通过执行下面的C++程序解决问题后获得气球并送给他。JMC保证了下面的程序一定能获得正确的结果。 void solve(int Q, int type[], long long first[], long long second[]) { vector<long long> vec; for (int i = 0; i < Q; ++i) { if (type[i] == 1) { long long k = first[i], val = second[i]; while (k--) { vec.push_back(val); } } else if (type[i] == 2) { sort(vec.begin(), vec.end()); long long l = first[i] - 1, r = second[i], res = 0; while (l < r) { res = (res + vec[l++]) % 1000000007; } printf("%lld\n", res); } } } 为防止你被JMC的代码搞到头晕目眩,JMC特意给出了问题的文字描述。已知一开始有一个空序列,接下来有Q次操作,每次操作给出type、first和second三个值。当type为1时,意味着该操作属于第一种操作:往序列尾部添加first个second数。当type为2时,意味着该操作属于第二种操作:查询序列中第first小至第second小的数值之和(一共有(second - first + 1)个数被累加),并将结果对1000000007取模后输出。 Input 单组数据 第一行一个Q(1 <= Q <= 1e5),代表Q次操作。 接下来有Q行,每行包含三个整数type、first和second;其中1 <= type <= 2。当type等于1时,0 <= first,second < 1e9。当type等于2时,1 <= first <= second,且first和second均不大于目前已添加进序列的数的数量。 Output 对于每次操作二,将结果对1000000007取模后输出。 Sample Input
Sample Output
Source | ||||||||||
|