Submission #145851

#TimeUsernameProblemLanguageResultExecution timeMemory
145851maruii역사적 조사 (JOI14_historical)C++14
15 / 100
251 ms3192 KiB
#include <bits/stdc++.h> using namespace std; using pii = pair<int, int>; #define ff first #define ss second #define eack emplace_back #define all(x) (x).begin(), (x).end() int X[100005], in[100005][2]; vector<int> xx; const int SIZE = 1 << 17; struct ST { long long A[2 * SIZE]; int sz; void update(int x, long long v) { x += SIZE; A[x] += v; for (x >>= 1; x; x >>= 1) A[x] = max(A[x << 1], A[x << 1 | 1]); } long long query() { return A[1]; } } seg; int main() { ios_base::sync_with_stdio(0), cin.tie(0); int N, Q; cin >> N >> Q; for (int i = 1; i <= N; ++i) cin >> X[i], xx.eack(X[i]); sort(all(xx)); xx.erase(unique(all(xx)), xx.end()); for (int i = 1; i <= N; ++i) { X[i] = lower_bound(all(xx), X[i]) - xx.begin(); } seg.sz = xx.size() - 1; vector<pii> qry[17005]; vector<long long> ans(Q); for (int i = 0; i < Q; ++i) { cin >> in[i][0] >> in[i][1]; qry[in[i][0] / 600].eack(in[i][1], i); } for (int i = 1; i <= N; ++i) sort(all(qry[i])); int s = 1, e = 0; for (int ii = 0; ii <= N / 600; ++ii) { for (auto i : qry[ii]) { int ns = in[i.ss][0], ne = in[i.ss][1]; for (; s < ns; ++s) seg.update(X[s], -xx[X[s]]); for (; s > ns; --s) seg.update(X[s - 1], xx[X[s - 1]]); for (; e < ne; ++e) seg.update(X[e + 1], xx[X[e + 1]]); for (; e > ne; --e) seg.update(X[e], -xx[X[e]]); ans[i.ss] = seg.query(); } } for (auto i : ans) cout << i << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...