JZOJ 3240. Seat
题目
分析
- 这道题乍一看,哦不就是个逆序对吗
- 用个map搞一下
- 直接打
代码
1 #include<iostream> 2 #include<map> 3 #include<cstdio> 4 #define ll long long 5 using namespace std; 6 map<string,int> mapp; 7 ll a[100001]; 8 ll c[100001]; 9 int n; 10 int lowbit(int x){ return x&(-x); } 11 void add(int i,int x) 12 { 13 while (i<=n) 14 { 15 c[i]+=x; 16 i+=lowbit(i); 17 } 18 } 19 int sum(int i) 20 { 21 int res=0; 22 while(i>=1) 23 { 24 res+=c[i]; 25 i-=lowbit(i); 26 } 27 return res; 28 } 29 int main () 30 { 31 string s; 32 33 cin>>n; 34 for (int i=1;i<=n;i++) {cin>>s; mapp[s]=i;} 35 for (int i=1;i<=n;i++) {cin>>s; a[i]=mapp[s];} 36 ll ans=0; 37 for (int i=1;i<=n;i++) 38 { 39 add(a[i],1); 40 ans+=i-sum(a[i]); 41 } 42 cout<<ans; 43 }
为何要逼自己长大,去闯不该闯的荒唐