前言:比赛的时候由于时间紧促,且先写的第九题导致这题压根没有思考的时间,没出成绩前摆了两个星期,最后拿了个省一,就特地回来重新写一遍
试题 H: 重新排序
【问题描述】 给定一个数组 A 和一些查询 Li , Ri,求数组中第 Li 至第 Ri 个元素之和。 小蓝觉得这个问题很无聊,于是他想重新排列一下数组,使得最终每个查 询结果的和尽可能地大。小蓝想知道相比原数组,所有查询结果的总和最多可 以增加多少?
【输入格式】 输入第一行包含一个整数 n。 第二行包含 n 个整数 A1, A2, · · · , An,相邻两个整数之间用一个空格分隔。 第三行包含一个整数 m 表示查询的数目。 接下来 m 行,每行包含两个整数 Li、Ri ,相邻两个整数之间用一个空格分 隔。 【
输出格式】 输出一行包含一个整数表示答案。
【样例输入】 5
1 2 3 4 5
2
1 3 2 5
【样例输出】 4
题目分析:询问的区间值相加,显而易见的肯定是有区间重复,(不重复则没有意义或意义不大后期可以考虑进去),既然有重复肯定是把大的值尽量放到重复次数多的位置,则实现思路就豁然开朗了;
代码实现思路:定义一个flag[ ] 数组用于记录每个区间出现出现的次数;
遍历给出的数据count1+=data[i]*flag[i],得到重新排序前的元素和;
将flag和data进行排序大->小
再对应相乘得到count2
最后cout< 实现代码 本答案不是标准答案 为个人看法,对错暂无从验证,欢迎网友指点#include