Submission #206541

#TimeUsernameProblemLanguageResultExecution timeMemory
206541osaaateiasavtnlFire (JOI20_ho_t5)C++14
100 / 100
488 ms135884 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define ii pair <int, int> #define app push_back #define all(a) a.begin(), a.end() #define bp __builtin_popcount #define ll long long #define mp make_pair #define f first #define s second #define Time (double)clock()/CLOCKS_PER_SEC const int N = 2e5 + 7; int n, q, a[N], l[N], r[N]; vector <int> d[N]; vector <ii> mem[N]; void add(int l, int r, int i, int x) { mem[l].app(mp(i, x)); mem[r + 1].app(mp(i, -x)); } int link_l[N], link_r[N]; int ans[N]; struct Fen { int f[N]; void clear() { for (int i = 0; i < N; ++i) f[i] = 0; } void add(int i, int x) { for (; i < N; i |= i + 1) f[i] += x; } int get(int i) { int ans = 0; for (; i >= 0; i &= i + 1, --i) ans += f[i]; return ans; } int get(int l, int r) { return get(r) - get(l - 1); } } f; //bigger left, not less right signed main() { #ifdef HOME freopen("input.txt", "r", stdin); #else #define endl '\n' ios_base::sync_with_stdio(0); cin.tie(0); #endif cin >> n >> q; for (int i = 0; i < n; ++i) cin >> a[i]; for (int i = 0; i < q; ++i) { int t; cin >> t >> l[i] >> r[i]; --l[i]; --r[i]; d[t + 1].app(i); } vector <int> s; for (int i = 0; i < n; ++i) { while (s.size() && a[s.back()] <= a[i]) { link_r[s.back()] = i; s.pop_back(); } s.app(i); } for (int e : s) link_r[e] = n; s.clear(); for (int i = n - 1; i >= 0; --i) { while (s.size() && a[s.back()] < a[i]) { link_l[s.back()] = i; s.pop_back(); } s.app(i); } for (int e : s) link_l[e] = -1; s.clear(); for (int i = 0; i < n; ++i) { for (int j = i; j < link_r[i]; ++j) { int len1 = j - i + 1; int len2 = j - link_l[i]; if (link_l[i] == -1) len2 = N - 2; add(len1, len2, j, a[i]); } } f.clear(); for (int len = 1; len < N; ++len) { for (auto e : mem[len]) f.add(e.f, e.s); for (auto e : d[len]) ans[e] = f.get(l[e], r[e]); } for (int i = 0; i < q; ++i) cout << ans[i] << '\n'; }
#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...