[树状数组] BZOJ 4240 有趣的家庭菜园
2016-06-06 07:44
375 查看
%%%POPOQQQ
从小到大枚举高度,由于无论将这株草移动到左侧还是右侧都对比它高的植物没有影响,因此贪心选择代价最小的方向即可
故答案为∑min(a[1…i-1]中大于a[i]的数的数量,a[i+1…n]中大于a[i]的数的数量)
从小到大枚举高度,由于无论将这株草移动到左侧还是右侧都对比它高的植物没有影响,因此贪心选择代价最小的方向即可
故答案为∑min(a[1…i-1]中大于a[i]的数的数量,a[i+1…n]中大于a[i]的数的数量)
#include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; typedef long long ll; inline char nc() { static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; } return *p1++; } inline void read(int &x) { char c=nc(),b=1; for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1; for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b; } const int N=300005; struct BIT{ int maxn; int c ; #define lowbit(x) ((x)&-(x)) inline void init(int n){ maxn=n; } inline void add(int x,int r){ for (int i=x;i<=maxn;i+=lowbit(i)) c[i]+=r; } inline int sum(int x){ int ret=0; for (int i=x;i;i-=lowbit(i)) ret+=c[i]; return ret; } inline int sum(int l,int r){ return sum(r)-sum(l-1); } }bit1,bit2; int n,a ; int sx ,icnt; inline int Bin(int x){ return lower_bound(sx+1,sx+icnt+1,x)-sx; } int main() { ll ans=0; freopen("t.in","r",stdin); freopen("t.out","w",stdout); read(n); for (int i=1;i<=n;i++) read(a[i]),sx[++icnt]=a[i]; sort(sx+1,sx+icnt+1); icnt=unique(sx+1,sx+icnt+1)-sx-1; bit1.init(icnt); bit2.init(icnt); for (int i=1;i<=n;i++) { a[i]=Bin(a[i]); bit2.add(a[i],1); } for (int i=1;i<=n;i++) { bit2.add(a[i],-1); ans+=min(bit1.sum(a[i]+1,icnt),bit2.sum(a[i]+1,icnt)); bit1.add(a[i],1); } printf("%lld\n",ans); return 0; }
相关文章推荐
- Windows平台下Python对文件路径的获取
- EventBus使用详解(一)——初步使用EventBus
- [最短路] BZOJ 4239 巴士走读
- 进程三状态转换图
- EventBus事件总线——优雅地替换Handler
- [树 乱搞] BZOJ 4238 电压
- IDEA - 如何将maven项目src下的源码目录内的xml文件编译进入classes
- SSH的整合简单实例
- 数据库fmdb
- [分治 单调栈] BZOJ 4237 稻草人
- httpd之防盗链和限制下载
- httpd之静态缓存
- 通过Jexus 部署 dotnetcore版本MusicStore 示例程序
- 网络demo
- httpd之使用rewrite对目录进行访问控制
- Thread and Process
- [Hash] BZOJ 4236 JOIOJI
- 解决java EE在Eclipse中复制项目异常
- linux命令提示符
- 常见的问题总结