# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
29292 | 2017-07-19T01:39:19 Z | 윤교준(#1168) | Meteors (POI11_met) | C++11 | 1963 ms | 31424 KB |
#include <bits/stdc++.h> #define pb push_back #define sz(V) ((int)(V).size()) #define allv(V) ((V).begin()),((V).end()) #define befv(V) ((V)[sz(V)-2]) #define sorv(V) sort(allv(V)) #define revv(V) reverse(allv(V)) #define univ(V) (V).erase(unique(allv(V)),(V).end()) #define clv(V) (V).clear() #define upmax(a,b) (a)=max((a),(b)) #define rb(x) ((x)&(-(x))) #define MAXN (300005) #define MAXM (300005) #define MAXK (600005) using namespace std; typedef long long ll; struct BIT { ll d[MAXM]; void init() { fill(d, d+MAXM, 0); } void upd(int x, ll r) { for(; x < MAXM; x += rb(x)) d[x] += r; } ll get(int x) { ll r = 0; for(; x; x -= rb(x)) r += d[x]; return r; } }; struct Node { Node(int idx, int s, int e) : idx(idx), s(s), e(e), x((s+e)/2) {} int s, e, x, idx; bool operator < (const Node& t) const { return x < t.x; } }; BIT bit; vector<int> G[MAXN]; vector<Node> V; int A[MAXK], B[MAXK], C[MAXK], RI[MAXK]; int D[MAXM], E[MAXN]; int Ans[MAXN]; bool isn[MAXN]; int N, M, K; void input() { scanf("%d%d", &N, &M); for(int i = 1; i <= M; i++) scanf("%d", &D[i]); for(int i = 1; i <= N; i++) scanf("%d", &E[i]); int KK; scanf("%d", &KK); for(int a, b, c, ki = 1; ki <= KK; ki++) { scanf("%d%d%d", &a, &b, &c); if(a <= b) { K++; A[K] = a; B[K] = b; C[K] = c; RI[K] = ki; } else { K++; A[K] = a; B[K] = M; C[K] = c; RI[K] = ki; K++; A[K] = 1; B[K] = b; C[K] = c; RI[K] = ki; } } } int main() { input(); //printf("N = %d, M = %d, K = %d\n", N, M, K); //for(int i = 1; i <= K; i++) printf("%d : %d %d %d %d\n", i, A[i], B[i], C[i], RI[i]); for(int i = 1; i <= M; i++) G[D[i]].pb(i); for(int i = 1; i <= K; i++) { bit.upd(A[i], C[i]); bit.upd(B[i]+1, -C[i]); } //for(int i = 1; i <= M; i++) printf("%d : %lld\n", i, bit.get(i)); for(int i = 1; i <= N; i++) { ll ret = 0; for(int v : G[i]) ret += bit.get(v); if(E[i] <= ret) continue; isn[i] = true; } for(int i = 1; i <= N; i++) { if(isn[i]) continue; V.pb(Node(i, 1, K)); } for(int t = 0; t < 25; t++) { bit.init(); sorv(V); for(int x = 1, vi = 0; x <= K && vi < sz(V); x++) { bit.upd(A[x], C[x]); bit.upd(B[x]+1, -C[x]); for(; vi < sz(V) && V[vi].x == x; vi++) { if(V[vi].s >= V[vi].e) continue; ll ret = 0; int idx = V[vi].idx; for(int v : G[idx]) ret += bit.get(v); if(E[idx] <= ret) V[vi].e = V[vi].x; else V[vi].s = V[vi].x+1; V[vi].x = (V[vi].s + V[vi].e) / 2; } } } for(Node& v : V) Ans[v.idx] = RI[v.s]; for(int i = 1; i <= N; i++) { if(isn[i] || !Ans[i]) { puts("NIE"); continue; } printf("%d\n", Ans[i]); } return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 24580 KB | Output is correct |
2 | Correct | 6 ms | 24580 KB | Output is correct |
3 | Correct | 9 ms | 24580 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 6 ms | 24580 KB | Output is correct |
2 | Correct | 9 ms | 24580 KB | Output is correct |
3 | Correct | 13 ms | 24580 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 59 ms | 24844 KB | Output is correct |
2 | Correct | 279 ms | 25240 KB | Output is correct |
3 | Correct | 213 ms | 25576 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 263 ms | 25472 KB | Output is correct |
2 | Correct | 276 ms | 25488 KB | Output is correct |
3 | Correct | 146 ms | 26128 KB | Output is correct |
4 | Correct | 43 ms | 25384 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 213 ms | 25112 KB | Output is correct |
2 | Correct | 309 ms | 25824 KB | Output is correct |
3 | Correct | 116 ms | 24580 KB | Output is correct |
4 | Correct | 219 ms | 25644 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 116 ms | 24872 KB | Output is correct |
2 | Correct | 329 ms | 25496 KB | Output is correct |
3 | Correct | 183 ms | 24976 KB | Output is correct |
4 | Correct | 313 ms | 26244 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1963 ms | 31424 KB | Output is correct |
2 | Incorrect | 1012 ms | 27232 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1893 ms | 31224 KB | Output is correct |
2 | Incorrect | 1002 ms | 26716 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |