【HDOJ6315】Naive Operations(线段树,树状数组)
2024-09-05 13:35:07
题意:
两个序列a和b,初始a[i]=0,b[i]给定且为一个1到n的排列,要求维护以下两种操作:
1.区间[L,R]内a[i]加1
2.询问[L,R]内a[i]/b[i](下取整)之和
n,q<=1e5
思路:
实际上a[i]/b[i]的线段树可以改为树状数组,因为只需要支持单点修改和前缀区间求和
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef vector<int> VI;
#define fi first
#define se second
#define MP make_pair
const int N=;
int ad[N<<],mn[N<<],T[N],b[N],n,m,cas; void pushdown(int p)
{
if(ad[p])
{
ad[p<<]+=ad[p];
mn[p<<]+=ad[p];
ad[p<<|]+=ad[p];
mn[p<<|]+=ad[p];
ad[p]=;
}
} void pushup(int p)
{
mn[p]=min(mn[p<<],mn[p<<|]);
} void build(int l,int r,int p)
{
ad[p]=;
if(l==r)
{
mn[p]=b[l];
return;
}
int mid=(l+r)>>;
build(l,mid,p<<);
build(mid+,r,p<<|);
pushup(p);
} void modify(int x)
{
for(int i=x;i<=n;i+=i&-i) T[i]++;
} int ask(int x)
{
int ans=;
for(int i=x;i;i-=i&-i) ans+=T[i];
return ans;
} void update(int l,int r,int x,int y,int p)
{
if((x<=l)&&(r<=y))
{
ad[p]--;
mn[p]--;
return;
}
pushdown(p);
int mid=(l+r)>>;
if(x<=mid) update(l,mid,x,y,p<<);
if(y>mid) update(mid+,r,x,y,p<<|);
pushup(p);
} void clear(int l,int r,int p)
{
if(l==r)
{
if(!mn[p])
{
mn[p]=b[l];
modify(l);
}
return;
}
pushdown(p);
int mid=(l+r)>>;
if(!mn[p<<]) clear(l,mid,p<<);
if(!mn[p<<|]) clear(mid+,r,p<<|);
pushup(p);
} int main()
{ while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=;i<=n;i++) scanf("%d",&b[i]);
build(,n,);
for(int i=;i<=n;i++) T[i]=;
for(int i=;i<=m;i++)
{
char ch[];
scanf("%s",ch);
if(ch[]=='a')
{
int l,r;
scanf("%d%d",&l,&r);
update(,n,l,r,);
clear(,n,);
}
else
{
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",ask(r)-ask(l-));
}
}
}
return ;
}
最新文章
- iOS----集成ijkplayer视频直播
- (转)Javascript本地存储小结
- sharepoint 2013 入门1_ 建立一个网页程序
- Getting Started With Hazelcast 读书笔记(第二章、第三章)
- Java虚拟机12:Java内存模型
- Oracle - 数据库的实例、表空间、用户、表之间关系
- http 响应码
- 【好文翻译】一步一步教你使用Spire.Doc转换Word文档格式
- 构建高可用web站点学习(三)
- 做一个有理想的IT人
- Sublime Text2 快捷键设置
- XSS CSRF
- UML和绘图工具Visio介绍
- SVG的内部事件添加
- yii2 Nav::widget() 和 Menu::widget()
- MySql Host is blocked because of many connection errors;
- void指针和const指针
- 图片处理之 Base64
- 脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)
- RobotFrameWork接口设计规范