import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.LinkedList;
import java.util.List;
public class sia {
private static class frac {
long licznik;
long mianownik;
frac(long l, long m) {
licznik = l;
mianownik = m;
}
public void add(frac f) {
licznik = licznik * f.mianownik + mianownik * f.licznik;
mianownik *= f.mianownik;
}
public void multiply(frac f) {
licznik *= f.licznik;
mianownik *= f.mianownik;
}
public void sub(frac f) {
f.licznik = -f.licznik;
add(f);
}
public void div(frac f) {
long tmp = f.licznik;
f.licznik = f.mianownik;
f.mianownik = tmp;
multiply(f);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
StreamTokenizer st = new StreamTokenizer(bufferedReader);
try {
st.nextToken();
int n = (int) st.nval;
st.nextToken();
int m = (int) st.nval;
// long sum = 0;
long[] raises = new long[n];
long[] heights = new long[n];
for (int i = 0; i < n; i++) {
st.nextToken();
// sum += (long) st.nval;
raises[i] = (long) st.nval;
heights[i] = raises[i];
}
// frac raisingAve = new frac(sum, n);
List<Long> results = new LinkedList<Long>();
long d, b = 0;
long last = 1;
long helper = 0;
for (int i = 1; i <= m; i++) {
st.nextToken();
d = (long) st.nval;
st.nextToken();
b = (long) st.nval;
long res = 0;
for (int j = 0; j < n; j++) {
helper = (d - last) * raises[j] + heights[j];
res += Math.max(0, helper - b);
heights[j] = Math.min(helper, b);
}
last = d;
results.add(res);
}
bufferedReader.close();
results.forEach(System.out::println);
} catch (Exception e) {
}
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.StreamTokenizer; import java.util.LinkedList; import java.util.List; public class sia { private static class frac { long licznik; long mianownik; frac(long l, long m) { licznik = l; mianownik = m; } public void add(frac f) { licznik = licznik * f.mianownik + mianownik * f.licznik; mianownik *= f.mianownik; } public void multiply(frac f) { licznik *= f.licznik; mianownik *= f.mianownik; } public void sub(frac f) { f.licznik = -f.licznik; add(f); } public void div(frac f) { long tmp = f.licznik; f.licznik = f.mianownik; f.mianownik = tmp; multiply(f); } } public static void main(String[] args) { // TODO Auto-generated method stub BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); StreamTokenizer st = new StreamTokenizer(bufferedReader); try { st.nextToken(); int n = (int) st.nval; st.nextToken(); int m = (int) st.nval; // long sum = 0; long[] raises = new long[n]; long[] heights = new long[n]; for (int i = 0; i < n; i++) { st.nextToken(); // sum += (long) st.nval; raises[i] = (long) st.nval; heights[i] = raises[i]; } // frac raisingAve = new frac(sum, n); List<Long> results = new LinkedList<Long>(); long d, b = 0; long last = 1; long helper = 0; for (int i = 1; i <= m; i++) { st.nextToken(); d = (long) st.nval; st.nextToken(); b = (long) st.nval; long res = 0; for (int j = 0; j < n; j++) { helper = (d - last) * raises[j] + heights[j]; res += Math.max(0, helper - b); heights[j] = Math.min(helper, b); } last = d; results.add(res); } bufferedReader.close(); results.forEach(System.out::println); } catch (Exception e) { } } } |
English