描述
一个数列包含n(1
Input
第一行包含一个数t代表总的测试样例数 每组样例包含4行 第一行包含一个整数n代表数列的长度 第二行包含n个小于1000的正整数用空格隔开 第三行包含一个整数m代表询问的个数 第四行包含m个在1到n之间的整数代表询问序号
Output
每组输出结果包含m个由空格隔开的整数代买m次询问的结果
Example Input
2 4 255 139 58 412 5 1 1 2 3 3 5 427 563 289 203 326 4 3 1 4 4
Example Output
197 197 58 0 0 203 818 0 0
解析:这道题不难,主要是有容易考虑不到的地方,我是通过结构体来存放数值和编号,然后以数值的大小排序,接着就计算每一个编号的结果值存放到res数组中,容易出错的是没有考虑数值可能重复的情况
比如这组数据 5 20 21 20 21 20 5 1 2 3 4 输出 0 60 0 60 0 如果考虑了这组数据应该问题就不大了。贴一下自己AC的代码
#include#include using std::sort; //定义全局变量 const int M=100000+5; struct data{ int n; int num; }a[M]; int b[M]; int res[M]; //优先按照数值的大小进行排序,如果数值相等再按照编号升序 bool cmp(data x,data y) { if(x.n y.n) { return false; }else{ return x.num 0&&a[i-1].n==a[temp-1].n) { res[a[i].num]+=a[temp-1].n; --temp; } }else{ //与前面的元素相同 res[a[i].num]=res[a[i-1].num]; } } //输出结果 for(int i=0; i