Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
31930 LYLAKIOIAKIOI 【S】T2 C++ 解答错误 40 454 MS 18032 KB 2180 2024-08-28 12:46:19

Tests(4/10):


#include<bits/stdc++.h> #define Rf(i,a,b) for(int i=(a);i<=(b);i++) #define Rb(i,a,b) for(int i=(a);i>=(b);i--) #define jp8 push_back using namespace std; const int N=5e5+10; int n,q;vector<int> tmp,tmp2; int a[N],cnt[N]; int qu[N],ans[N],INF=1e9+10; int lowbit(int x){ return x&(-x); } struct bit{ int T[N]; void init(){ Rf(i,1,n) T[i]=0; }void upd(int x,int v){ for(int i=x;i<=n;i+=lowbit(i)){ T[i]+=v; } }int qry(int x){ int res=0; for(int i=x;i>0;i-=lowbit(i)){ res+=T[i]; }return res; } }BIT; struct sgt{ #define ls p*2 #define rs p*2+1 #define mid (l+r)/2 int T[N<<2]; void pu(int p){ T[p]=min(T[ls],T[rs]); }void bd(int p,int l,int r){ if(l==r){ T[p]=INF;return ; }bd(ls,l,mid);bd(rs,mid+1,r); pu(p); }void upd(int p,int l,int r,int x,int v){ if(l==r) T[p]=v; if(l==r) return; if(x<=mid) upd(ls,l,mid,x,v); if(x>mid) upd(rs,mid+1,r,x,v); pu(p); }int qry(int p,int l,int r,int pl,int pr){ //cout<<l<<' '<<r<<' '<<pl<<' '<<pr<<endl; if(l>r) return INF; if(pl<=l&&r<=pr) return T[p]; int cnt=INF; if(pl<=mid) cnt=min(cnt,qry(ls,l,mid,pl,pr)); if(pr>mid) cnt=min(cnt,qry(rs,mid+1,r,pl,pr)); return cnt; } }SGT; struct nd{ int id,vl; bool operator<(const nd &b){ return vl>b.vl; } }aa[N]; void slv(){ cin>>n>>q; Rf(i,1,n) cin>>a[i],aa[i]=(nd){i,a[i]}; BIT.init(); Rb(i,n,1){ BIT.upd(a[i],1); cnt[i]=BIT.qry(a[i]-1); ans[1]+=cnt[i]; }Rf(i,1,n) qu[i]=INF; Rf(i,1,q){ int x;cin>>x; qu[x]=min(qu[x],i); }sort(aa+1,aa+n+1);SGT.bd(1,1,n); Rf(i,1,n){ SGT.upd(1,1,n,aa[i].id,qu[aa[i].id]); int ps=SGT.qry(1,1,n,1,aa[i].id); if(ps>=1e6) continue; ans[ps]-=cnt[aa[i].id]; }Rf(i,1,q){ ans[i]+=ans[i-1]; }Rf(i,1,q){ cout<<ans[i]<<'\n'; } } int main(){ slv(); return 0; }


测评信息: