2013年12月23日 星期一

[POI] 19th stage I - pB Letters


#include<stdio.h>
#include<stack>
#define low(x) (x&-x)
using namespace std;
char a[1000005],b[1000005];
stack<int> s[1000];
int C[2000005]={0},n;
void add(int x,int k){
    for(int i=x;i<=n;i+=low(i))
        C[i]+=k;
}
int cnt(int x){
    int i,ans=0;
    for(i=x;i>0;i-=low(i))
        ans+=C[i];
    return ans;
}
int main(){
    long long int ans=0,i,x;
    scanf("%d",&n);
    scanf("%s%s",&a[1],&b[1]);
    for(i=1;i<=n;i++)
        s[a[i]].push(i),add(i,1);
    for(i=n;i>=1;i--){
        x=s[b[i]].top();
        s[b[i]].pop();
        ans+=i-cnt(x);
        add(x,-1);
    }
    printf("%lld\n",ans);
}

沒有留言:

張貼留言