#include <cstdio> const int MAXN=500005; long long T[MAXN],przyrost[MAXN],b,d,pd,x,wynik; int n,m; void fastscanf(long long *liczba) { register char c=0; while(c<33) c=getc_unlocked(stdin); (*liczba)=0; while(c>32) { (*liczba)=(*liczba)*10LL+(c-'0'); c=getc_unlocked(stdin); } } int main() { scanf("%d%d", &n, &m); for(int i=0; i<n; ++i) fastscanf(&przyrost[i]); while(m--) { wynik=0LL; fastscanf(&d); fastscanf(&b); for(int i=0; i<n; ++i) { x=przyrost[i]*(d-pd); if((T[i]+x)>b) { wynik+=(T[i]+x-b); T[i]=b; } else { T[i]+=x; } } printf("%lld\n", wynik); pd=d; } }
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 | #include <cstdio> const int MAXN=500005; long long T[MAXN],przyrost[MAXN],b,d,pd,x,wynik; int n,m; void fastscanf(long long *liczba) { register char c=0; while(c<33) c=getc_unlocked(stdin); (*liczba)=0; while(c>32) { (*liczba)=(*liczba)*10LL+(c-'0'); c=getc_unlocked(stdin); } } int main() { scanf("%d%d", &n, &m); for(int i=0; i<n; ++i) fastscanf(&przyrost[i]); while(m--) { wynik=0LL; fastscanf(&d); fastscanf(&b); for(int i=0; i<n; ++i) { x=przyrost[i]*(d-pd); if((T[i]+x)>b) { wynik+=(T[i]+x-b); T[i]=b; } else { T[i]+=x; } } printf("%lld\n", wynik); pd=d; } } |