제출 #47368

#제출 시각아이디문제언어결과실행 시간메모리
47368tieunhi새로운 문제 (POI11_pio)C++14
63 / 100
1088 ms6548 KiB
#include <bits/stdc++.h> #define pii pair<int, int> #define mp make_pair #define F first #define S second #define PB push_back #define maxc 1000000007 #define N 510005 using namespace std; struct Dequeue { int a[N]; int top, bot; void clear() {top = 1; bot = 0;} void push_back(int x) {a[++bot] = x;} void pop_back() {bot--;} void pop_front() {top++;} int back() {return a[bot];} int front() {return a[top];} bool empty() {return (bot < top);} }q; int n, a[N], x2[N], res[N], delta[N]; void inline MAX(int &A, int B) {A = max(A, B);} int readInt () { bool minus = false; int result = 0; char ch; ch = getchar(); while (true) { if (ch == '-') break; if (ch >= '0' && ch <= '9') break; ch = getchar(); } if (ch == '-') minus = true; else result = ch-'0'; while (true) { ch = getchar(); if (ch < '0' || ch > '9') break; result = result*10 + (ch - '0'); } if (minus) return -result; else return result; } int main() { //freopen("INP.TXT", "r", stdin); n = readInt(); for (int i = 1; i <= n; i++) a[i] = readInt(); for (int i = 1; i <= sqrt(n) + 1; i++) x2[i] = i*i; for (int i = 1; i <= sqrt(n) + 1; i++) delta[i] = x2[i] - x2[i-1]; for (int can = 1; can <= sqrt(n)+1; can++) { int len = delta[can]; q.clear(); for (int i = 1; i <= n; i++) { int pos = i - x2[can-1] - 1; while (!q.empty() && q.front() <= pos - len) q.pop_front(); if (pos > 0) { while (!q.empty() && a[q.back()] <= a[pos]) q.pop_back(); q.push_back(pos); } if (!q.empty()) MAX(res[i], a[q.front()] + can); } q.clear(); for (int i = n; i >= 1; i--) { int pos = i + x2[can-1] + 1; while (!q.empty() && q.front() >= pos + len) q.pop_front(); if (pos <= n) { while (!q.empty() && a[q.back()] <= a[pos]) q.pop_back(); q.push_back(pos); } if (!q.empty()) MAX(res[i], a[q.front()] + can); } } for (int i = 1; i <= n; i++) if (res[i] <= a[i]) printf("0\n"); else printf("%d\n", res[i] - a[i]); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...