到底哪里错了啊
查看原帖
到底哪里错了啊
100325
peterwuyihong楼主2021/2/6 13:46

疯了,交了6发WAWA

完全粘的动态逆序对的,加了多组数据的修改

#include<bits/stdc++.h>
using namespace std;
#define debug(x) cerr<<#x<<' '<<x<<endl
#ifndef ONLINE_JUDGE
	#define pia getchar
#else
	#define pia nc
#endif
char nc(){
  	static char buf[1<<25],*p=buf,*q=buf;
  	if(p==q&&(q=(p=buf)+fread(buf,1,1<<25,stdin),p==q))return EOF;
  	return *p++;
}
template<class T>void read(T&x){
	short f=1;x=0;
	char ch=pia();
	while(!isdigit(ch)){
		if(ch=='-')f=-1;
		ch=pia();
	}while(isdigit(ch)){
		x=(x<<1)+(x<<3)+(ch^48);
		ch=pia();
	}x*=f;
}
template<class T>void write(T x){
	if(x<0)putchar('-'),x=-x;
	if(x>=10)write(x/10);
	putchar(x%10+48);
}
#define int long long
#define maxn 200010
int n,m;
int lc[maxn*433],rc[maxn*433],rt[maxn],t[maxn*433],tot;
int pos[maxn],x;
void change(int&x,int l,int r,int pos,int k){
	if(!x)x=++tot;
	t[x]+=k;
	if(l==r)return;
	int mid=(l+r)>>1;
	if(pos<=mid)change(lc[x],l,mid,pos,k);
	else change(rc[x],mid+1,r,pos,k);
}
int ans;
int qa[maxn],qb[maxn],ca,cb;
int ask(int l,int r,int x,int on){
	ca=cb=0;
	for(int i=r;i;i-=i&-i)qa[++ca]=rt[i];
	for(int i=l-1;i;i-=i&-i)qb[++cb]=rt[i];
	l=1,r=n;
	int res=0;
	while(l<r){
		int mid=(l+r)>>1;
		if(x>mid){
			if(on){
				for(int i=1;i<=ca;i++)res+=t[lc[qa[i]]];
				for(int i=1;i<=cb;i++)res-=t[lc[qb[i]]];
			}
			for(int i=1;i<=ca;i++)qa[i]=rc[qa[i]];
			for(int i=1;i<=cb;i++)qb[i]=rc[qb[i]];
			l=mid+1;
		}else{
			if(!on){
				for(int i=1;i<=ca;i++)res+=t[rc[qa[i]]];
				for(int i=1;i<=cb;i++)res-=t[rc[qb[i]]];
			}
			for(int i=1;i<=ca;i++)qa[i]=lc[qa[i]];
			for(int i=1;i<=cb;i++)qb[i]=lc[qb[i]];
			r=mid;
		}
	}
	return res;
}
signed main(){
	while(~scanf("%lld %lld",&n,&m)){
		for(int i=1;i<=n;i++){
			read(x);pos[x]=i;
			ans+=ask(1,i-1,x,0);
			for(int j=i;j<=n;j+=j&-j)change(rt[j],1,n,x,1);
		}
		while(m--){
			write(ans),putchar('\n');
			read(x);
			ans-=ask(1,pos[x]-1,x,0);
			ans-=ask(pos[x]+1,n,x,1);
			for(int j=pos[x];j<=n;j+=j&-j)change(rt[j],1,n,x,-1);
		}		
		memset(rt,0,sizeof rt);
		for(int i=0;i<=tot;i++)lc[i]=rc[i]=t[i]=0;
		tot=ans=0;
	}
}

2021/2/6 13:46
加载中...