关注
第一题我记得是100%。思路是预读入所有查询,然后由小到大排序。再从小到大遍历一遍所有区间,边遍历边从排好序的查询中不断拿出这区间的查询。 public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int a[] = new int[n];
for (int i = 0; i < n; ++i) {
a[i] = sc.nextInt();
}
int apl[] = new int[n];
apl[0] = a[0];
for (int i = 1; i < n; ++i) {
apl[i] = apl[i - 1] + a[i];
}
int m = sc.nextInt();
Node nodes[] = new Node[m];
for (int i = 0; i < m; ++i) {
int c = sc.nextInt();
nodes[i] = new Node(c, i);
}
Arrays.sort(nodes, new Node(0, 0));
int cur = 0;
for (int i = 0; i < n; ++i) {
int left = i == 0 ? 1 : apl[i - 1] + 1;
int right = apl[i];
while (nodes[cur].value <= right && nodes[cur].value >= left) {
nodes[cur].ord = i + 1;
nodes[cur].value = nodes[cur].index;
if (++cur == m)
break;
}
if (cur == m)
break;
}
Arrays.sort(nodes, new Node(0, 0));
for (int i = 0; i < m; ++i)
System.out.println(nodes[i].ord);
}
}
class Node implements Comparator<Node> {
int value;
int index;
int ord;
public Node(int a, int b) {
value = a;
index = b;
}
public int compare(Node o1, Node o2) {
return o1.value - o2.value;
}
}
查看原帖
点赞 1
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 面试问题记录 #
31211次浏览 506人参与
# 假如我穿越到了妈妈的18岁 #
1607次浏览 27人参与
# 京东TGT #
35079次浏览 157人参与
# 入职第五天,你被拉进了几个工作群 #
14292次浏览 77人参与
# 面试经验谈 #
20324次浏览 321人参与
# 工作一周年分享 #
15261次浏览 101人参与
# 机械人,你的第一份感谢信是谁给的 #
23394次浏览 295人参与
# 对妈妈没说出口的话 #
13254次浏览 329人参与
# 视觉/交互/设计招聘信息汇总 #
10834次浏览 596人参与
# 面试吐槽bot #
5194次浏览 50人参与
# 妈妈治愈了你哪些脆皮时刻 #
5754次浏览 107人参与
# 请用你的专业向妈妈表白 #
4111次浏览 44人参与
# 职场新人生存指南 #
338226次浏览 7244人参与
# 异地恋该为对方跳槽吗 #
26884次浏览 130人参与
# 硬件人更看重稳定还是高薪 #
41856次浏览 213人参与
# 上班苦还是上学苦呢? #
214921次浏览 1288人参与
# 机械求职避坑tips #
42464次浏览 356人参与
# 硬件人秋招的第一个offer #
67044次浏览 1082人参与
# 零跑求职进展汇总 #
2076次浏览 16人参与
# 不考虑转正,实习多久合适 #
25711次浏览 119人参与
# 租房找室友 #
30201次浏览 150人参与