# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
27371 | 2017-07-12T10:49:47 Z | kdh9949 | Ruka (COI15_ruka) | C++14 | 3 ms | 3204 KB |
#include <bits/stdc++.h> using namespace std; int n, q, l, tx[2], dx[100010][2], off; const int B = 50000010; struct BIT{ map<int, int> dat; void upd(int x, int v){ for(x += B; x <= 2 * B; x += x & -x) dat[x] += v; } int get(int x){ int ret = 0; for(x += B; x; x -= x & -x) ret += dat[x]; return ret; } } U[2], D[2]; void ap(int t){ int nx = tx[t] + dx[l][t]; int s = min(tx[t], nx), e = max(tx[t], nx); D[t].upd(s + off, -1); D[t].upd(e + off, 1); U[t].upd(s, 1); U[t].upd(e, -1); tx[t] += dx[l++][t]; } void dui(int t){ tx[t] -= dx[--l][t]; int nx = tx[t] + dx[l][t]; int s = min(tx[t], nx), e = max(tx[t], nx); U[t].upd(s, -1); U[t].upd(e, 1); D[t].upd(s + off, 1); D[t].upd(e + off, -1); } void upd(int t, int v){ dx[t][l] += v; off -= v; } int get(int t){ return U[t].get(0) + D[t].get(off); } int main(){ scanf("%d", &n); tx[0] = tx[1] = 1; for(int i = 1; i <= n; i++){ scanf("%d%d", dx[i], dx[i] + 1); for(int t = 0; t < 2; t++){ int nx = tx[t] + dx[t][i]; D[t].upd(min(tx[t], nx), 1); D[t].upd(max(tx[t], nx), -1); tx[t] = nx; } } l = 1; tx[0] = tx[1] = 1; scanf("%d", &q); for(char t; q--; ){ scanf(" %c", &t); if(t == 'F' && l < n){ ap(0); ap(1); } else if(t == 'B' && l > 1){ dui(0); dui(1); } else if(t == 'C'){ int x[2]; scanf("%d%d", x, x + 1); upd(0, x[0]); upd(1, x[1]); } else{ printf("%d\n", get(0) + get(1)); } } }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 3 ms | 3204 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 3 ms | 3204 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 3 ms | 3204 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |