Submission #631247

#TimeUsernameProblemLanguageResultExecution timeMemory
631247inksamuraiPoklon (COCI17_poklon)C++17
140 / 140
837 ms31564 KiB
#include <bits/stdc++.h> using namespace std; #define rep(i,n) for(int i=0;i<n;i++) #define rng(i,c,n) for(int i=c;i<n;i++) #define per(i,n) for(int i=n-1;i>=0;i--) #define fi first #define se second #define pb push_back #define sz(a) (int)a.size() #define vec(...) vector<__VA_ARGS__> #define _3phCa4T ios::sync_with_stdio(0),cin.tie(0) typedef long long ll; using pii=pair<int,int>; using vi=vector<int>; void print(){cout<<'\n';} template<class h,class...t> void print(const h&v,const t&...u){cout<<v<<' ',print(u...);} // e template<class S,S (*op)(S,S),S (*e)()> struct segtree{ int n; vec(S) seg; segtree(int _n){ init(_n); } void init(int _n){ n=1; while(n<=_n){ n*=2; } seg=vec(S)(2*n); n=_n; } S prod(int node,int l,int r,int _l,int _r){ if(l>=_r or r<=_l){ return e(); } if(_l<=l and r<=_r){ return seg[node]; } int m=(l+r)>>1; return op(prod(node*2,l,m,_l,_r),prod(node*2+1,m,r,_l,_r)); } S prod(int l,int r){ return prod(1,0,n,l,r); } void set(int node,int l,int r,int pos,const S&x){ if(l==r-1){ seg[node]=x; return; } int m=(l+r)/2; if(pos<m){ set(node*2,l,m,pos,x); }else{ set(node*2+1,m,r,pos,x); } seg[node]=op(seg[node*2],seg[node*2+1]); } void set(int pos,const S&x){ set(1,0,n,pos,x); } S get(int pos){ return prod(1,0,n,pos,pos+1); } }; int op(int l,int r){return l+r;} int e(){return 0;} signed main(){ _3phCa4T; int n,q; cin>>n>>q; vi a(n); rep(i,n){ cin>>a[i]; } vec(vec(pii)) qry(n); rep(i,q){ int l,r; cin>>l>>r; l-=1,r-=1; qry[l].pb(pii(r,i)); } vi pns(q); std::map<int,int> _lst,__lst,___lst; rep(i,n){ _lst[a[i]]=n; __lst[a[i]]=n; ___lst[a[i]]=n; } segtree<int,op,e> seg(n+1); per(i,n){ int v=a[i]; int nnj=_lst[v]; int nj=__lst[v]; int j=___lst[v]; seg.set(nnj,1); seg.set(nj,-1); seg.set(j,0); for(auto p:qry[i]){ pns[p.se]=seg.prod(i,p.fi+1); } ___lst[v]=nj; __lst[v]=nnj; _lst[v]=i; } rep(i,q){ print(pns[i]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...