제출 #942472

#제출 시각아이디문제언어결과실행 시간메모리
942472bachhoangxuanSum Zero (RMI20_sumzero)C++17
100 / 100
224 ms17848 KiB
// Judges with GCC >= 12 only needs Ofast // #pragma GCC optimize("O3,no-stack-protector,fast-math,unroll-loops,tree-vectorize") // MLE optimization // #pragma GCC optimize("conserve-stack") // Old judges // #pragma GCC target("sse4.2,popcnt,lzcnt,abm,mmx,fma,bmi,bmi2") // New judges. Test with assert(__builtin_cpu_supports("avx2")); // #pragma GCC target("avx2,popcnt,lzcnt,abm,bmi,bmi2,fma,tune=native") // Atcoder // #pragma GCC target("avx2,popcnt,lzcnt,abm,bmi,bmi2,fma") /* #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set; - insert(x),erase(x) - find_by_order(k): return iterator to the k-th smallest element - order_of_key(x): the number of elements that are strictly smaller */ #include<bits/stdc++.h> using namespace std; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); uniform_real_distribution<> pp(0.0,1.0); #define ll long long #define ld long double #define pii pair<int,int> #define piii pair<int,pii> #define mpp make_pair #define fi first #define se second const ll inf=1e18; const int mod=998244353; const int maxn=400005; const int B=650; const int maxs=655; const int maxm=200005; const int maxq=1000005; const int maxl=25; const int maxa=1000000; const int root=3; const int base=101; int rand_int(int l,int r){ return l+(int)(rng()%(r-l+1)); } int n,par[maxn],val[maxn],add[maxn]; int lst[maxn]; ll pre[maxn]; int q; vector<piii> qq; int findpar(int u){ if(u!=par[u]){ int p=par[u]; par[u]=findpar(par[u]); val[u]+=val[p]; return par[u]; } return u; } void unions(int u,int v){ u=findpar(u);v=findpar(v); if(u==v) return; val[v]+=add[v]-add[u]; par[v]=u; } void solve(){ cin >> n; for(int i=1;i<=n;i++) par[i]=i; for(int i=1;i<=n;i++){ cin >> pre[i]; //pre[i]=rand_int(-1e9,1e9); pre[i]+=pre[i-1]; } cin >> q; for(int i=1;i<=q;i++){ int l,r;cin >> l >> r; /* l=rand_int(1,n); r=rand_int(1,n); if(l>r) swap(l,r); */ qq.push_back(mpp(r,mpp(l,i))); } sort(qq.begin(),qq.end()); sort(par+0,par+n+1,[](int x,int y){ if(pre[x]!=pre[y]) return pre[x]<pre[y]; else return x<y; }); for(int i=n;i>=0;i--){ if(!i || pre[par[i]]!=pre[par[i-1]]) lst[par[i]]=0; else lst[par[i]]=par[i-1]+1; } for(int i=1;i<=n;i++) par[i]=i; deque<pii> dq; for(int i=1,id=0;id<q;id++){ while(i<=qq[id].fi){ dq.push_back({i-1,i}); if(lst[i]){ int l=lst[i],p=-1; while(!dq.empty() && dq.front().fi<l){ int u=dq.front().se;dq.pop_front(); if(p!=-1) unions(u,p); p=u; } if(p!=-1){ p=findpar(p); dq.push_back({i,p}); add[p]++; } } i++; } int p=findpar(qq[id].se.fi); qq[id].fi=val[qq[id].se.fi]+add[p]; } sort(qq.begin(),qq.end(),[](piii x,piii y){ return x.se.se<y.se.se; }); for(int i=0;i<q;i++) cout << qq[i].fi << '\n'; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); int test=1;//cin >> test; while(test--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...