国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

BZOJ2789: [Poi2012]Letters

2019-11-08 02:58:20
字體:
來源:轉載
供稿:網友

一個很眼熟的貪心 首先一個序列對他編好號后,末狀態編號的逆序對數就是交換相鄰2個達到這個狀態需要的最少次數 將A序列1~n編號,再對B序列按順序每個字母賦這個字母有的所有編號里最小的這樣能使得逆序對數最少,然后求B的逆序對數

code:

#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<bitset>#include<string>#include<vector>#include<cstdio>#include<cstdlib>#include<cstring>#include<climits>#include<complex>#include<iostream>#include<algorithm>#define ll long long#define lowbit(x) x&(-x)using namespace std;const int maxn = 1100000;queue<int>Q[26];int n;int s[maxn];struct node{ int x,i; node(){} node(int _x,int _i){x=_x;i=_i;}}a[maxn];bool cmp(node x,node y){return x.x<y.x;}void add(int x){for(;x<=n;x+=lowbit(x))s[x]++;}int query(int x){ int r=0; for(;x;x-=lowbit(x)) r+=s[x]; return r;}int main(){ char str; scanf("%d",&n); getchar(); for(int i=1;i<=n;i++) { scanf("%c",&str); Q[str-'A'].push(i); }getchar(); for(int i=1;i<=n;i++) { scanf("%c",&str); int j=str-'A'; int x=Q[j].front(); Q[j].pop(); a[i]=node(x,i); } sort(a+1,a+n+1,cmp); ll re=0; for(int i=n;i>=1;i--) { re+=(ll)query(a[i].i); add(a[i].i); }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 福建省| 芦溪县| 洪江市| 宜川县| 昌都县| 永福县| 金门县| 岳阳县| 桦甸市| 饶阳县| 谷城县| 武邑县| 修水县| 桃园县| 泗洪县| 阳新县| 正安县| 黄冈市| 北票市| 霍城县| 南京市| 大洼县| 怀来县| 浦县| 杭锦后旗| 高邑县| 连平县| 会昌县| 西青区| 朔州市| 从江县| 合川市| 鲁山县| 霞浦县| 静宁县| 义马市| 台前县| 武义县| 额尔古纳市| 达孜县| 女性|