zoj3279 简单二分
来源:互联网 发布:哈利波特魔杖淘宝 编辑:程序博客网 时间:2024/05/18 01:24
随意在书上挑了道题,结果是道简单的二分题,随手写了。
题意:
有1到n 那个level 每一个level有a[i]只蚂蚁
两种操作
p a b 把第a个level的蚂蚁数量改成b
q a 查询第a只蚂蚁在哪个level里。
思路:要查的第x只蚂蚁,满足a[1]+a[2]+....+a[i-1]<x<a[1]+....a[i].所以1到n二分i就可以了,然后用线段树维护前缀和即可,当然也可以用树状数组,我习惯写线段树。
代码:
#include<iostream>#include<stdio.h>#include<string.h>#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1using namespace std;const int maxn=100005;int sum[maxn<<2];void PushUP(int rt) {sum[rt] = sum[rt<<1] + sum[rt<<1|1];}void build(int l,int r,int rt) {if (l == r) {scanf("%d",&sum[rt]);return ;}int mid= (l + r) >> 1;build(lson);build(rson);PushUP(rt);}void update(int p,int add,int l,int r,int rt) {if (l == r) {sum[rt] = add;return ;}int mid= (l + r) >> 1;if (p <= mid) update(p , add , lson);else update(p , add , rson);PushUP(rt);}int query(int L,int R,int l,int r,int rt) {if (L <= l && r <= R) {return sum[rt];}int mid= (l + r) >> 1;int ret = 0;if (L <= mid) ret += query(L , R , lson);if (R > mid) ret += query(L , R , rson);return ret;}int main(){ int n,m; char a[10]; int x,y; while(~scanf("%d",&n)){ build(1,n,1); scanf("%d",&m); for(int i=1;i<=m;i++){ scanf("%s",a); if(a[0]=='p'){ scanf("%d%d",&x,&y); update(x,y,1,n,1); } else{ scanf("%d",&x); int l=1,r=n,mid; int ans; while(l<r){ mid=(l+r)>>1; ans=query(1,mid,1,n,1); if(ans<x) l=mid+1; if(ans>=x) r=mid; } printf("%d\n",r); } } }return 0;}
0 0
- zoj3279 简单二分
- zoj3279
- zoj3279 Ants
- ZOJ3279 ants
- zoj3279 ants 线段树
- 简单二分
- ZOJ3279 —— 8G island
- 简单的二分查找
- 简单算法--二分搜索
- poj3041Asteroids 简单二分匹配
- hdu2289(简单二分)
- 简单的二分HDU2199
- hdu1551 简单二分
- hdu4190 简单二分
- POJ2239简单二分匹配
- hdu4004 简单二分+贪心
- 二分简单题
- POJ 3061 简单二分
- 使用PLSQL Developer和DbVisualizer查询oracle数据库时,出现查询数据中文乱码情况
- java随机生成一个6位数
- UVA 10986Sending email 【dijkstra + 堆优化】
- 连载《一个程序猿的生命周期》-26.组建项目团队
- TCP三次握手及其背后的缺陷
- zoj3279 简单二分
- UIScrollView
- Codeforce round #315 A music
- initBinder,对日期修改
- Java Thread的interrupt详解
- 重写ListView的Adapter时,getView()方法没有执行的原因
- oracl数据库的常用知识
- UITableView
- js基础1