# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
55097 | 2018-07-06T04:45:32 Z | ainta(#1558) | Sushi (JOI16_sushi) | C++11 | 237 ms | 3684 KB |
#include<cstdio> #include<algorithm> #include<queue> #define BB 10 using namespace std; int n, Q; struct point { int P[1<<BB], SZ; int U[1<<BB], UC; priority_queue<int>PQ; void init() { int i; for (i = UC - 1; i >= 0; i--) { P[U[i]] = PQ.top(); PQ.pop(); } } void Make() { int i, Mx = -1; UC = 0; while (!PQ.empty())PQ.pop(); for (i = 0; i < SZ; i++) { if (Mx < P[i]) { Mx = P[i]; U[UC++] = i; PQ.push(P[i]); } } } int Go(int x) { PQ.push(x); int ret = PQ.top(); PQ.pop(); return ret; } }w[(400000>>BB)+2]; int Do(int b, int e, int x) { for (int i = (b >> BB); i <= (e >> BB); i++) { int bb = (i << BB), ee = min(((i + 1) << BB) - 1, n - 1); if (b <= bb && bb <= e) { x = w[i].Go(x); } else{ w[i].init(); bb = max(b, bb)&((1 << BB) - 1); ee = min(e, ee)&((1 << BB) - 1); for (int j = bb; j <= ee; j++) { if (w[i].P[j] > x) { swap(w[i].P[j], x); } } w[i].Make(); } } return x; } int main() { int i, b, e, c; scanf("%d%d", &n, &Q); for (i = 0; i < n; i++) { scanf("%d", &w[i>>BB].P[i&((1<<BB)-1)]); w[i >> BB].SZ++; } while (Q--) { scanf("%d%d%d", &b, &e, &c); b--, e--; if (b > e) { printf("%d\n",Do(0, e, Do(b, n - 1, c))); } else { printf("%d\n", Do(b, e, c)); } } }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 15 ms | 1912 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 237 ms | 3684 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 15 ms | 1912 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |