제출 #865326

#제출 시각아이디문제언어결과실행 시간메모리
865326Nuraly_SerikbayMeteors (POI11_met)C++17
74 / 100
2800 ms50480 KiB
//çalışan kazanır// #include "bits/stdc++.h" using namespace std; //#define int long long #define pb push_back #define S second #define F first #define all(x) x.begin(),x.end() #define YOSIK() ios_base::sync_with_stdio(0),cin.tie(0) int gcd (int a, int b) {if (b == 0){return a;}else {return gcd (b, a % b);}} const int N = 3e5 + 5; const int INF = 2e18 + 1; const int MOD = 1e9 + 7; const int MODD = 1070234587ll; const double eps = 0.0001; //const int p = 87; int n, m, o[N], p[N], q, l[N], r[N], a[N], ans[N]; pair <int, int> brd[N]; vector <int> pos[N], MID[N]; long long t[N*4], mod[N*4]; void upd (int v, int tl, int tr, int l, int r, int val) { if (tr < l || r < tl) return; if (l <= tl && tr <= r) { t[v] += val; return; } int mid = (tl + tr) >> 1; upd (v + v, tl, mid, l, r, val), upd (v + v + 1, mid + 1, tr, l, r, val); return; } long long get (int v, int tl, int tr, int pos) { if (tl == tr) return t[v]; int mid = (tl + tr) >> 1; if (pos <= mid) return (t[v] + get (v + v, tl, mid, pos)); return (t[v] + get (v + v + 1, mid + 1, tr, pos)); } void cl (int v, int tl, int tr) { t[v] = 0; if (tl == tr) return; int mid = (tl + tr) >> 1; cl (v + v, tl, mid), cl (v + v + 1, mid + 1, tr); return; } void solution () { cin >> n >> m; for (int i = 1; i <= m; ++ i) { cin >> o[i]; pos[o[i]].pb (i); } for (int i = 1; i <= n; ++ i) cin >> p[i]; cin >> q; for (int i = 1; i <= q; ++ i) cin >> l[i] >> r[i] >> a[i]; for (int i = 1; i <= n; ++ i) brd[i] = make_pair (1, q), ans[i] = -1; long long sum = 0; for (int tt = 19; tt >= 0; -- tt) { for (int i = 1; i <= n; ++ i) { if (brd[i].F > brd[i].S) continue; MID[(brd[i].F + brd[i].S) >> 1].pb (i); } for (int mid = 1; mid <= q; ++ mid) { if (l[mid] <= r[mid]) upd (1, 1, m, l[mid], r[mid], a[mid]); else { upd (1, 1, m, 1, r[mid], a[mid]); upd (1, 1, m, l[mid], m, a[mid]); } for (auto i: MID[mid]) { sum = 0; for (auto j: pos[i]) sum += get (1, 1, m, j); if (sum >= p[i]) brd[i].S = mid - 1, ans[i] = mid; else brd[i].F = mid + 1; } } cl (1, 1, m); for (int i = 1; i <= q; ++ i) MID[i].clear(); } for (int i = 1; i <= n; ++ i) { if (ans[i] == -1) cout << "NIE\n"; else cout << ans[i] << '\n'; } return; } signed main() { YOSIK(); // srand (time(0)); // freopen ("E.in", "r", stdin); // freopen ("E.out", "w", stdout); int TT = 1;// cin >> TT; for (int i = 1; i <= TT; ++ i) { // cout << "Case " << i << ": "; solution (); } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

met.cpp:16:22: warning: overflow in conversion from 'double' to 'int' changes value from '2.0e+18' to '2147483647' [-Woverflow]
   16 | const int INF = 2e18 + 1;
      |                 ~~~~~^~~
#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...