hdu 2688 Rotate
来源:互联网 发布:mac软件开发工具 编辑:程序博客网 时间:2024/05/21 10:12
http://acm.hdu.edu.cn/showproblem.php?pid=2688
这个题目看起来挺吓人的,但是注意到[S E] (abs(E-S)<=1000),非常的小就是我们的突破口了……开始用树状数组求出数组总的ans,然后循环的时候直接模拟就可以了并且维护这个ans就行了……还好这个题目询问的时候中是询问整个区间的ans,不然真不会了,囧……
这个题用c++交好,g++很容易超时的样子
#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define lowbit(x) x&(-x)const int maxn=10010;int d[maxn],a[3000100];void add(int pos){ for(;pos<=10000;pos+=lowbit(pos)) d[pos]++;}int query(int pos){ int sum=0; for(;pos>=1;pos-=lowbit(pos)) sum+=d[pos]; return sum;}int main(){ int n,m,l,r; long long ans; while(scanf("%d",&n)==1) { memset(d,0,sizeof(d)); ans=0; for(int i=0;i<n;i++) { scanf("%d",&a[i]); ans+=query(a[i]-1); add(a[i]); } char ord[5]; scanf("%d",&m); while(m--) { scanf("%s",ord); if(ord[0]=='Q') printf("%I64d\n",ans); else { scanf("%d%d",&l,&r); int tmp=a[l],cnt1=0,cnt2=0; for(int i=l+1;i<=r;i++) { if(a[i]>tmp) cnt1++; else if(a[i]<tmp) cnt2++; a[i-1]=a[i]; } a[r]=tmp; ans+=(cnt2-cnt1); } } } return 0;}
- hdu 2688 Rotate
- hdu 2688 Rotate
- hdu 2688 Rotate
- HDU - 2688 Rotate
- hdu 5.3.6 2688 rotate
- hdu 2688 Rotate#树状数组
- hdu 2688 Rotate(树状数组)
- hdu 2688 Rotate (树状数组)
- hdu 2688 Rotate 树状数组
- HDU 2688 Rotate 树状数组
- HDU-2688-Rotate-(树状数组)
- HDU 4998 Rotate
- HDU 4998 Rotate
- HDU 4998 Rotate
- HDU 4998 Rotate
- hdu 4998 Rotate(几何)
- HDU 4998 Rotate
- hdu 4998 Rotate
- 体积阴影(Shadow Volumes)生成算法
- eclipse下SVN subclipse插件
- Android通讯录 字段
- 关于时间函数localtime()返回值的注意问题
- metadata元数据
- hdu 2688 Rotate
- opencv 用摄像头提取图片后图片命名问题
- DAO设计模式开发
- 管道文件和I/O文件用途——自动telnet linux和路由器(
- Linux目录结构及主要内容
- MFC编程第一节:Windows程序内部运行原理
- 堆排序
- php 字符串匹配
- 源码分析之Adapter