//============================================================================ // Name : PA2015_1A_Siano.cpp // Author : Kornel // Description : Siano //============================================================================ #include <stdio.h> using namespace std; #define MAX 500000 int N; int M; int grownSpeed[MAX]; long long harvestDay[MAX]; long long harvestHeight[MAX]; int speed; long long day; long long height; long long lastHarvestDay = 0; long long totalSpeed; long long heightArea[MAX]; long long brutal(long long day, long long height) { long long total = 0; for (int i=0; i<N; i++) { long long currentHeight = heightArea[i] + (day - lastHarvestDay) * grownSpeed[i]; if (currentHeight > height) { total += (currentHeight - height); heightArea[i] = height; } else { heightArea[i] = currentHeight; } } lastHarvestDay = day; return total; } int main() { scanf("%d %d", &N, &M); for (int i=0; i<N; i++) { scanf("%d", &speed); grownSpeed[i] = speed; totalSpeed += speed; } for (int i=0; i<M; i++) { scanf("%lld %lld", &day, &height); harvestDay[i] = day; harvestHeight[i] = height; printf("%lld\n", brutal(day, height)); } return 0; }
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 | //============================================================================ // Name : PA2015_1A_Siano.cpp // Author : Kornel // Description : Siano //============================================================================ #include <stdio.h> using namespace std; #define MAX 500000 int N; int M; int grownSpeed[MAX]; long long harvestDay[MAX]; long long harvestHeight[MAX]; int speed; long long day; long long height; long long lastHarvestDay = 0; long long totalSpeed; long long heightArea[MAX]; long long brutal(long long day, long long height) { long long total = 0; for (int i=0; i<N; i++) { long long currentHeight = heightArea[i] + (day - lastHarvestDay) * grownSpeed[i]; if (currentHeight > height) { total += (currentHeight - height); heightArea[i] = height; } else { heightArea[i] = currentHeight; } } lastHarvestDay = day; return total; } int main() { scanf("%d %d", &N, &M); for (int i=0; i<N; i++) { scanf("%d", &speed); grownSpeed[i] = speed; totalSpeed += speed; } for (int i=0; i<M; i++) { scanf("%lld %lld", &day, &height); harvestDay[i] = day; harvestHeight[i] = height; printf("%lld\n", brutal(day, height)); } return 0; } |