博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu2688 Rotate(树状数组)
阅读量:7281 次
发布时间:2019-06-30

本文共 876 字,大约阅读时间需要 2 分钟。

题目链接:

题意描写叙述:对一个长度为2<=n<=3000000的数组,求数组中有序对(i<j而且F[i]<F[j])的数量?其中数组元素F[i]范围(0<F[i]<=10000)。现有m<10000个操作

操作一:R x y(当中y-x<=1000)将数组x~y之间的元素旋转

操作二:Q查询当前数组中含有的有序对的数量

解题思路:

1、先求的原始数组中有序对的总数量(假设直接求,则时间复杂度为O(n*10000)。假设使用树状数组时间复杂度为O(nlgn))即O(n*14)

2、对于每次操作一,循环遍历F[x+1]~F[y]中元素与F[x]的关系,对总数量进行加减就可以O(1000*m)

3、对于操作二,直接输出总数量就可以(O(1))

代码:

#include 
#include
#define MAXN 3000010using namespace std;int d[MAXN];int C[10010];int n,m;int lowbit(int x){ return x&(-x);}int sum(int pos){ int res=0; while(pos>0) { res+=C[pos]; pos-=lowbit(pos); } return res;}void add(int pos,int v){ while(pos<=10000) { C[pos]+=v; pos+=lowbit(pos); }}int main(){ while(scanf("%d",&n)!=EOF) { memset(C,0,sizeof(C)); long long ans=0; for(int i=0; i
v) ans--; else if(d[j]

转载地址:http://wzkjm.baihongyu.com/

你可能感兴趣的文章
kylin-cube存储结构
查看>>
PHP基础知识学习总结
查看>>
【SSH网上商城项目实战30】项目总结(附源码下载地址)
查看>>
2015最流行的Android组件、工具、框架大全
查看>>
如何定义领域模型(概念模型)
查看>>
关于快排的技巧
查看>>
坑爹的生活,源于你的工作谁都能干
查看>>
微信公众平台开发(59)相册
查看>>
库存管理系统
查看>>
Linux下安装JDK
查看>>
WebGL高级编程:开发Web3D图形 PDF(中文版带书签)
查看>>
asynchronous.js
查看>>
jquery视频教程网址,记录
查看>>
Rearrange a string so that all same characters become d distance away
查看>>
Python之路(第二十六篇) 面向对象进阶:内置方法
查看>>
追梦路上
查看>>
Centos7 gvim sougou搜狗输入法无法切换
查看>>
Dynamics CRM 报表导出EXCEL 列合并问题的解决方法
查看>>
MTK6573的LDO控制
查看>>
【工具】-RAP接口管理工具
查看>>