hoj 2430 Counting the algorithms
2012-10-05 16:25
417 查看
题解:
这个题的关键在于:如果是两个包含的区间则先删除外边的最优。如果是交叉区间的情况,无论先删哪个,答案都是一样的。所以采取如下策略,从左边向右边,一个一个删除。至于统计动态的两个相邻元素之间的数目,可以使用树状数组。
时间复杂度O(nlogn)
这个题的关键在于:如果是两个包含的区间则先删除外边的最优。如果是交叉区间的情况,无论先删哪个,答案都是一样的。所以采取如下策略,从左边向右边,一个一个删除。至于统计动态的两个相邻元素之间的数目,可以使用树状数组。
时间复杂度O(nlogn)
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=200010; int f[maxn],l[maxn],a[maxn]; long long tree[maxn]; int n; inline int lowbit(int x) { return x&(-x); } void add(int pos,int x) { for(int i=pos;i<=2*n;i+=lowbit(i)) tree[i]+=x; } int getsum(int pos) { int sum=0; for(int i=pos;i>0;i-=lowbit(i)) sum+=tree[i]; return sum; } int main() { while(scanf("%d",&n)!=EOF) { memset(f,0,sizeof(f)); memset(l,0,sizeof(l)); for(int i=1;i<=2*n;i++) { scanf("%d",&a[i]); f[a[i]]==0?f[a[i]]=i:l[a[i]]=i; add(i,1); } long long ans=0; for(int i=1;i<=2*n;i++) if(getsum(i)-getsum(i-1)>0) { ans=ans+getsum(l[a[i]])-getsum(i-1)-1; add(i,-1); add(l[a[i]],-1); } printf("%lld\n",ans); } return 0; }
相关文章推荐
- HOJ_2430 Counting the algorithms
- HOJ 2430——Counting the algorithms(树状数组+贪心)
- hoj 2430 Counting the algorithms (树状数组)
- hoj 2430 Counting the algorithms(树状数组,贪心)
- hoj 2430 Counting the algorithms
- HOJ——T 2430 Counting the algorithms
- 【HOJ2430】【贪心+树状数组】 Counting the algorithms
- HOJ2430 Counting the Algorithms 树状数组
- 【HOJ2430】Counting the Algorithms-区间维护
- hoj2430 Counting the algorithms
- The Tomes of Delphi: Algorithms and Data Structures
- The Most Important Algorithms
- 小白算法练习 hdu 不要62 POJ 2282 the Counting problem 数位dp
- HOJ 2739 The Chinese Postman Problem
- POJ 2282 The Counting Problem,组合数学
- HOJ The Colored Cubes
- c# 调用MD5CryptoServiceProvider出现 System.InvalidOperationException: This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms.
- HOJ 2739 The Chinese Postman Problem
- 杭电 HOJ 1010 Tempter of the Bone 解题报告
- 5 Techniques To Understand Machine Learning Algorithms Without the Background in Mathematics