Codeforces538F A Heap of Heaps【分块+差分求前缀和】
来源:互联网 发布:ubuntu16.04优化 编辑:程序博客网 时间:2024/06/01 20:38
题意:给出一个长度为n的序列,构造k(1<=k<n)叉小根堆,规定点i的父亲是(i-2)/k+1,问k叉堆中有多少个点不符合要求。
哎呀,这题很好做嘛。。你看数据是10W,然后看到(i-2)/k+1,因为整除嘛。。最多有sqrt(i-2)种取值(是吧我没说错吧?),连续一段答案会是相等的,也就是说,对于一段k在k·~(i-2)/((i-2)/k·)范围内,一个点的父亲都是同一个点QAQ。于是复杂度就是n*sqrt(n)啦。涉及到区间修改单点查询,就用差分求前缀和优化一下就好啦~哎呀这样就做出来了0.0。
算法流程:这个还用说吗QAQ,直接看代码好了0.0。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define INF 0x3f3f3f3f#define ll long long#define N 200020 using namespace std;int data[N],n;int sum[N];int main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&data[i]);}for(int i=2;i<=n;i++){int v=i-2;int j,t;for(j=1;j<=i-2;j=t+1){t=v/(v/j);if(data[(i-2)/j+1]>data[i]) sum[j]++,sum[t+1]--;}if(data[1]>data[i]) sum[i-1]++,sum[n]--;}for(int i=1;i<n;i++){sum[i]+=sum[i-1];printf("%d ",sum[i]);}return 0;}
0 0
- Codeforces538F A Heap of Heaps【分块+差分求前缀和】
- 51nod 1533 一堆的堆 & Codeforces538F A Heap of Heaps(树状数组||主席树)
- [CF538F]A Heap of Heaps
- [CF538F]A Heap of Heaps && 持久化线段树
- codeforces 580B Arpa and a list of numbers 前缀和+思维+分块 (调和级数)
- Codeforces 538F A Heap of Heaps 离线+树状数组+离散化
- 【UVa】10755 Garbage Heap 三维前缀和
- 堆:Binary Heap, Fibonacci Heaps资料+总结
- 线性筛求莫比乌斯反演函数+分块+前缀和
- Heaps
- codeforces 851 D. Arpa and a list of numbers(前缀和+bruteforce)
- Codeforces 851D Arpa and a list of numbers【思维+前缀和】
- Codeforces 851 D Arpa and a list of numbers(前缀和)
- UVa 10755 Garbage Heap 解题报告(前缀和)
- Heaps of data: tables without clustered indexes
- Snippet: Enable Low Fragmentation Heap for all heaps
- 哈希+前缀和 hdu5496 Beauty of Sequence
- Using Binary Heaps in A* Pathfinding
- JNDI和数据库连接池
- SqlServer 审核(脚本示例)
- 深入Java集合学习系列:ArrayList的实现原理
- childNodes,children和noteType
- UVaOJ 674 Coin Change
- Codeforces538F A Heap of Heaps【分块+差分求前缀和】
- java进阶 - 多态
- UI UIPickerView
- 【C/C++学习】C++语言学习积累
- 一个最不可思议的MySQL死锁分析
- MyEclipse安装插件的方法
- iOS开发相关小细节
- Roman to Integer
- Linux 高可用(HA)集群基本概念详解