Submission #786384

#TimeUsernameProblemLanguageResultExecution timeMemory
786384PenguinsAreCute역사적 조사 (JOI14_historical)C++17
100 / 100
2974 ms14760 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define int long long #define fi first #define se second #define mp make_pair #define pb push_back #define LL_MAX LONG_LONG_MAX #define LL_MIN LONG_LONG_MIN #define speed ios_base::sync_with_stdio(false); cin.tie(0) #define stMx(a,b) a = max(a,b) #define stMn(a,b) a = min(a,b) struct qry{int l, r, idx;}; #define REP(i, a, b) for(int i = a; i < b; i++) #define lb(v,x) (lower_bound(v,v+N,x)-v) #define BSIZE 400 bool comp(qry a, qry b) { if(a.l/BSIZE==b.l/BSIZE) return a.r<b.r; return a.l<b.l; } int vec[121010]; #define MAXN 131072 int s[2*MAXN], e[2*MAXN], val[2*MAXN]; void init(int st, int en) { s[1]=st; e[1]=en; REP(i,1,131072) if(s[i]!=e[i]) { //printf("%lld %lld %lld\n", i, s[i], e[i]); int mid = (s[i] + e[i]) >> 1; s[i<<1]=s[i]; e[i<<1]=mid; s[i<<1|1]=mid+1, e[i<<1|1]=e[i]; } } void update(int x, int u) { int i = x + 131072; val[i] += u; while(i) { i /= 2; if(i) val[i] = max(val[i<<1],val[i<<1|1]); } } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(0); int N, Q, l=1,r=0; cin >> N >> Q; ll ans[Q]; int arr[N+1], v[N+1]; init(0,131071); REP(i,1,N+1) {cin>>arr[i]; vec[i-1]=arr[i];} sort(vec,vec+N); REP(i,1,N+1) v[i]=lb(vec,arr[i]); qry query[Q]; REP(i,0,Q) {cin>>query[i].l>>query[i].r; query[i].idx=i;} sort(query,query+Q,comp); REP(i,0,Q) { while(l>query[i].l) {l--;update(v[l],vec[v[l]]);} while(l<query[i].l) {update(v[l],-vec[v[l]]);l++;} while(r>query[i].r) {update(v[r],-vec[v[r]]);r--;} while(r<query[i].r) {r++;update(v[r],vec[v[r]]);} ans[query[i].idx]=val[1]; } REP(i,0,Q) 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...