Skip to Content

Counting Haybales

Análisis oficial (Java) 

Implementación

Complejidad temporal: O((N+Q)logN)\mathcal{O}((N+Q)\log N)

#include <bits/stdc++.h> using namespace std; int main() { freopen("haybales.in", "r", stdin); int bale_num; int query_num; cin >> bale_num >> query_num; vector<int> haybales(bale_num); for (int i = 0; i < bale_num; i++) { cin >> haybales[i]; } sort(haybales.begin(), haybales.end()); freopen("haybales.out", "w", stdout); for (int i = 0; i < query_num; i++) { int start, end; cin >> start >> end; int left = lower_bound(haybales.begin(), haybales.end(), start) - haybales.begin(); int right = upper_bound(haybales.begin(), haybales.end(), end) - haybales.begin(); cout << right - left << '\n'; } }
import java.io.*; import java.util.*; public class Haybales { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new FileReader("haybales.in")); StringTokenizer initial = new StringTokenizer(in.readLine()); int baleNum = Integer.parseInt(initial.nextToken()); int queryNum = Integer.parseInt(initial.nextToken()); int haybales[] = new int[baleNum]; StringTokenizer baleST = new StringTokenizer(in.readLine()); for (int i = 0; i < baleNum; i++) { haybales[i] = Integer.parseInt(baleST.nextToken()); } Arrays.sort(haybales); PrintWriter pw = new PrintWriter("haybales.out"); for (int i = 0; i < queryNum; i++) { StringTokenizer query = new StringTokenizer(in.readLine()); int start = Integer.parseInt(query.nextToken()); int end = Integer.parseInt(query.nextToken()); int left = lowerBound(haybales, start); int right = upperBound(haybales, end); pw.println(right - left); } pw.close(); } static int lowerBound(int[] arr, int x) { int lo = 0; int hi = arr.length; while (lo < hi) { int mid = lo + (hi - lo) / 2; if (arr[mid] >= x) { hi = mid; } else { lo = mid + 1; } } return lo; } static int upperBound(int[] arr, int x) { int lo = 0; int hi = arr.length; while (lo < hi) { int mid = lo + (hi - lo) / 2; if (arr[mid] > x) { hi = mid; } else { lo = mid + 1; } } return lo; } }
from bisect import bisect_left, bisect_right with open("haybales.in") as read: bale_num, query_num = [int(i) for i in read.readline().split()] haybales = sorted(int(i) for i in read.readline().split()) ans = [] for _ in range(query_num): start, end = [int(i) for i in read.readline().split()] left = bisect_left(haybales, start) right = bisect_right(haybales, end) ans.append(right - left) print("\n".join(str(a) for a in ans), file=open("haybales.out", "w"))