记录编号 153260 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [国家集训队2011]排队(魏铭) 最终得分 100
用户昵称 Gravatarnew ioer 是否通过 通过
代码语言 C++ 运行时间 2.152 s
提交时间 2015-03-17 17:25:27 内存使用 6.71 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,tot,tim=1,c[21000],h[21000],a[21000],ans[21000];
struct node{
	int id,x,y,v;
}q[200000],q0[200000];
bool cmp(node a,node b){
	if(a.x==b.x) return a.id<b.id;
	return a.x<b.x;
}
void in(int &x){
	int ch;
	while((ch=getchar())<48);x=ch-48;
	while((ch=getchar())>47) x=x*10+ch-48;
}
void add(int id,int x,int y,int w){
	if(w==1){
		q[++tot]=(node){id,x-1,tim,w};
		q[++tot]=(node){id,x-1,y,-w};
		q[++tot]=(node){id,n,y-1,w};
		q[++tot]=(node){id,x,y-1,-w};	
		q[++tot]=(node){-1,x,y,w};
	}
	else{
		q[++tot]=(node){-1,x,y,w};
		q[++tot]=(node){id,x-1,tim,w};
		q[++tot]=(node){id,x-1,y,-w};
		q[++tot]=(node){id,n,y-1,w};
		q[++tot]=(node){id,x-1,y-1,-w};	
	}
}
void modify(int i,int x){
	while(i<=tim) c[i]+=x,i+=i&-i;
}
int query(int i){
	int res=0;
	while(i) res+=c[i],i-=i&-i;
	return res;
} 
void solve(int l,int r){
	if(l==r) return;
	int mid=(l+r)>>1,cnt=0;
	for(int i=l;i<=mid;i++) if(q[i].id==-1) q0[++cnt]=q[i];
	for(int i=mid+1;i<=r;i++)if(q[i].id!=-1)q0[++cnt]=q[i];
	sort(q0+1,q0+cnt+1,cmp);
	for(int i=1;i<=cnt;i++)
		if(q0[i].id==-1) modify(q0[i].y,q0[i].v);
		else ans[q0[i].id]+=query(q0[i].y)*q0[i].v;
	for(int i=1;i<=cnt;i++) if(q0[i].id==-1) modify(q0[i].y,-q0[i].v);
	solve(l,mid),solve(mid+1,r);
}
int main(){
	freopen("nt2011_queue.in","r",stdin);
	freopen("nt2011_queue.out","w",stdout);
	in(n);
	for(int i=1;i<=n;i++) in(h[i]),a[i]=h[i];
	sort(h+1,h+n+1),tim=1;
	for(int i=2;i<=n;i++) if(h[i]!=h[i-1]) h[++tim]=h[i];
	for(int i=1;i<=n;i++) a[i]=lower_bound(h+1,h+tim+1,a[i])-h;
	for(int i=1;i<=n;i++) add(0,i,a[i],1);
	in(m);
	for(int x,y,i=1;i<=m;i++){
		in(x),in(y);
		if(a[x]==a[y]) continue;
		add(i,x,a[x],-1),add(i,y,a[y],-1);
		add(i,x,a[y],1), add(i,y,a[x],1);
		swap(a[x],a[y]);
	}
	solve(1,tot),printf("%d\n",ans[0]);
	for(int i=1;i<=m;i++) ans[i]+=ans[i-1],printf("%d\n",ans[i]);
}