POJ - 2886 Who Gets the Most Candies
2015-12-09 00:21
309 查看
筛法+划分树。
枚举因子,类似筛法计算因子数量,复杂度为n/2 + n/3 + ... + n/n ≈ O(nlogn)。
值域已知,只有删除操作,寻找kth,用划分树就好了O(nlogn)。二分+树状数组也可以,只是复杂度多乘一个logn。
树状数组
枚举因子,类似筛法计算因子数量,复杂度为n/2 + n/3 + ... + n/n ≈ O(nlogn)。
值域已知,只有删除操作,寻找kth,用划分树就好了O(nlogn)。二分+树状数组也可以,只是复杂度多乘一个logn。
/********************************************************* * ------------------ * * author AbyssalFish * **********************************************************/ #include<cstdio> #include<iostream> #include<string> #include<cstring> #include<queue> #include<vector> #include<stack> #include<vector> #include<map> #include<set> #include<algorithm> #include<cmath> #include<numeric> using namespace std; const int MAX_N = 5e5+1, LEN = 11; char name[MAX_N][LEN]; int card[MAX_N]; int N, K; int C[MAX_N]; int q_Kth(int k) { int p = 0, c = 0; for(int i = 19; i >= 0; i--){ p += 1<<i; (p >= N || c + C[p] >= k)? p -= 1<<i : c += C[p]; } return p+1; } void sub(int x) { while(x <= N){ C[x]--; x += x&-x; } } int Fp[MAX_N+1]; //#define LOCAL int main() { #ifdef LOCAL freopen("in.txt","r",stdin); #endif //cout<<(1<<20);//ceil(log2(5e5)+1); scanf("%d%d",&N,&K); for(int i = 2; i <= N; i++){ for(int j = i; j <= N; j += i){ Fp[j]++; } } int tar = 1; for(int i = 2; i <= N; i++){ if(Fp[tar] < Fp[i]) tar = i; } for(int i = 0; i < N; i++) scanf("%s%d", name[i], card+i); for(int i = 1; i <= N; i++) { C[i] = i&-i; } int pos , k = K-1, mn = N-tar; for(int n = N; n-- > mn; ){ pos = q_Kth(k+1)-1; sub(pos+1); if(n){ if(card[pos] > 0) card[pos]--; k = (card[pos]+k)%n; if(k < 0) k += n; } } printf("%s %d\n", name[pos], Fp[tar]+1); return 0; }
树状数组
相关文章推荐
- 第二十六天-文件系统选型及nfs网络文件进阶
- [leetcode]Remove Nth Node From End of List
- leetcode -- Minimum Depth of Binary Tree -- 重点
- javaweb学习总结(十一)——使用Cookie进行会话管理
- 20135206、20135236第四次试验报告
- Android ListView下拉与上拉刷新加载更多(一)
- Android设置虚线、圆角、渐变
- eden拯救大兵雷诺
- js 排序:sort()方法、冒泡排序、二分法排序。
- iOS动画编程1-仿射变换
- Bete冲刺第四阶段
- Ubuntu 14.04中gedit打开文件出现中文乱码问题
- adb logcat
- Leetcode: Word Pattern
- jQuery 遍历函数(w3school)
- leetcode -- Maximum Depth of Binary Tree -- 重点
- IE数组排序问题的处理
- Android样式开发——常用标签
- android应用间数据传递(使用ContentProvider及SQLite在应用间传递数据)
- js事件委托