hdu2688(求顺序数)
http://acm.hdu.edu.cn/showproblem.php?pid=2688
#include<algorithm> using namespace std; const int maxn=10005; const int maxm=3000005; int c[maxn],a[maxm],n; int sum(int x) { int s=0; while(x>=1) { s+=c[x]; x-=x&(-x); } return s; } void updata(int i) { while(i<=maxn-1) { c[i]++; i+=i&(-i); } } int main() { int i,m,x,y; __int64 ans; char str[2]; while(scanf("%d",&n)>0) { memset(c,0,sizeof(c)); ans=0; for(i=0;i<n;i++) { scanf("%d",&a[i]); updata(a[i]); ans+=sum(a[i]-1); } scanf("%d",&m); while(m--) { scanf("%s",str); if(str[0]=='Q') printf("%I64d\n",ans); else if(str[0]=='R') { scanf("%d %d",&x,&y); int count=a[x]; for(i=x;i<y;i++) { a[i]=a[i+1]; //逆序数也可用此方法处理 if(a[i]>count) ans--; else if(a[i]<count) ans++; } a[y]=count; } } } return 0; }
朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。