LibreOJ #514. 「LibreOJ β Round #2」模擬只會猜題意
阿新 • • 發佈:2017-08-09
clas oid loj gist mem bsp num clu n)
二次聯通門 : LibreOJ #514. 「LibreOJ β Round #2」模擬只會猜題意
/* LibreOJ #514. 「LibreOJ β Round #2」模擬只會猜題意 本想打個暴力找找規律 結果交上去就A了。。。 讀入所有數 處理出前綴和 然後枚舉區間長度 處理處1~n的答案 後O(1)查詢即可 復雜度O(n^2 + m) */ #include <iostream> #include <cstring> #include <cstdio> voidread (int &now) { register char word = getchar (); int temp = 0; for (now = 0; !isdigit (word); word = getchar ()) if (word == ‘-‘) temp = 1; for (; isdigit (word); now = now * 10 + word - ‘0‘, word = getchar ()); if (temp) now = -now; } #define Max 100060 intnumber[Max]; int Answer[Max]; int sum[Max]; inline int max (int a, int b) { return a > b ? a : b; } int main (int argc, char *argv[]) { int N, M; read (N); read (M); memset (Answer, -0x3f, sizeof Answer); register int i, j; for (i = 1; i <= N; ++ i) { read (number[i]); sum[i]= sum[i - 1] + number[i]; } int Maxn = Answer[0]; for (i = 1; i <= N; ++ i) for (j = 1; i + j - 1 <= N; ++ j) Answer[i] = max (Answer[i], sum[i + j - 1] - sum[j - 1]); for (i = N; i; -- i) { Maxn = max (Maxn, Answer[i]); Answer[i] = max (Answer[i], Maxn); } for (int x; M; -- M) { read (x); printf ("%d\n", Answer[x]); } return 0; }
LibreOJ #514. 「LibreOJ β Round #2」模擬只會猜題意