hdu 1166 排兵布阵
/* ***********************************************
Author :xryz
Email :523689985@qq.com
Created Time :4-22 20:46:48
File Name :hdu排兵布阵.cpp
************************************************ */#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;int c[50000+5];
int lowbit (int x)
{return x&-x;
}
int sum(int x)
{int ret=0;while(x>0){ret+=c[x];x-=lowbit(x);}return ret;
}void add(int x,int d,int n)
{while(x<=n){c[x]+=d;x+=lowbit(x);}
}int main()
{int t,i,n,j,m,tmp1,tmp2;char s[24];scanf("%d",&t);for(int ii=1;ii<=t;ii++){scanf("%d",&n);memset(c,0,sizeof(c));for(i=1;i<=n;i++){scanf("%d",&m);add(i,m,n);}printf("Case %d:\n",ii);while(~scanf("%s",s)){if(strcmp(s,"End")==0) break;if(s[0]=='A') {scanf("%d%d",&i,&j);add(i,j,n);}else if(s[0]=='Q'){scanf("%d%d",&i,&j);if(i>1) {i--;tmp1=sum(i);}else tmp1=0;tmp2=sum(j);printf("%d\n",tmp2-tmp1);}else if(s[0]=='S'){scanf("%d%d",&i,&j);add(i,-j,n);}}}return 0;
}
线段树
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
struct node
{int left,right,sum;
} tree[200000+5];int a[50000+5];void make(int id,int l,int r)//建树
{tree[id].left=l;tree[id].right=r;if(l==r){tree[id].sum=a[l];}else{int mid=(l+r)/2;make(id*2,l,mid);make(id*2+1,mid+1,r);tree[id].sum=tree[id*2].sum+tree[id*2+1].sum;}
}void add(int id,int pos,int d)//单点更新
{tree[id].sum+=d;if(tree[id].left==tree[id].right) return ;int mid=(tree[id].left+tree[id].right)/2;if(pos>mid) add(id*2+1,pos,d);else add(id*2,pos,d);}int query(int l,int r,int id)//查询
{if(tree[id].left==l&&tree[id].right==r)return tree[id].sum;else{int mid=(tree[id].left+tree[id].right)/2;if(r<=mid) return query(l,r,id*2);else if(l>mid) return query(l,r,id*2+1);elsereturn query(l,mid,id*2)+query(mid+1,r,id*2+1);}
}int main()
{int T,i,n,j,l,r;char s[10];scanf("%d",&T);for(int k=1; k<=T; k++){scanf("%d",&n);a[0]=0;for(i=1; i<=n; i++) scanf("%d",&a[i]);make(1,1,n);printf("Case %d:\n",k);while(~scanf("%s",s)){if(strcmp(s,"End")==0) break;else if(strcmp(s,"Add")==0){scanf("%d%d",&i,&j);add(1,i,j);}else if(strcmp(s,"Sub")==0){scanf("%d%d",&i,&j);add(1,i,-j);}else{scanf("%d%d",&i,&j);int ans=query(i,j,1);printf("%d\n",ans);}}}return 0;
}
hdu 1166 排兵布阵相关推荐
- hdu 1166 敌兵布阵(单点更新)
hdu 1166 敌兵布阵(基本操作) 有三种操作:询问区间总和,增加某个兵营的兵的数目,减少某个兵营的兵的数目.实际上也只有两个. 在更新的时候,每到一个区间就把当前区间的sum增加对应的数目,到达 ...
- HDU 1166 敌兵布阵(线段树:点更新,区间求和)
HDU 1166 敌兵布阵(线段树:点更新,区间求和) http://acm.hdu.edu.cn/showproblem.php?pid=1166 题意: 给你n个整数,然后给你多条命令,每条命令如 ...
- 树状数组板子题之一:hdu 1166 敌兵布阵
树状数组板子题之一:hdu 1166 敌兵布阵 题目链接:hdu 1166 敌兵布阵 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手 ...
- hdu 1166 敌兵布阵 (线段树)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU 1166 敌兵布阵
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- hdu 1166 敌兵布阵
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- hdu 1166 敌兵布阵(线段树之 单点更新+区间求和)
敌兵布阵 Time Limit: 2000/10 ...
- hdu 1166 敌兵布阵 树状数组
敌兵布阵 Time Limit: 2000/1000 ...
- 【树状数组】HDU 1166 敌兵布阵
敌兵布阵 日常题目胡乱总结 是个裸的树状数组qwq 区间查询+单点修改 字符判断相等那个地方我开始用的单引号 ' ' 直接不通过编译QAQ 第一遍交没有在一组数据结束后清空c数组 WA的让我很懵逼 ...
最新文章
- 仅展示近三天的动态设置_微信朋友圈设置三天可见了吗?
- HDU2568 前进【水题】
- Win8Metro(C#)数字图像处理--2.33图像非线性变换
- Nhibernate+SQLite 入门实例指南二 类的继承、多态关系
- (笔记)堆和栈的区别-两种不同的数据结构
- Beta版本发布报告
- C语言程序设计答案黄保和编,C语言程序设计答案(黄保和编)第5章.pdf
- 怎么设置php的css颜色代码,CSS的文本字体颜色如何设置
- 【软件使用技巧】一(截图)
- dcs world f15c教学_开源声码器WORLD在语音合成中的应用
- 遥感原理与应用总结——第三章:遥感传感器及成像原理
- 银河麒麟V10 远程桌面
- 怎么根据快递单号批量查询物流信息?
- [转]int转string string转int
- 二级页面的极简模板(帮助理解二级页面)
- html如何实现3d动画,基于webGL和HTML5的网页3D动画的设计与实现.pdf
- 解放军美女网络尖兵,90余昼夜写代码40多万行
- python人民币小写转大写_人民币金额转中文大写 (python实现)
- java cache定时过期,本地缓存高性能之王Caffeine
- JQuery实现移动9宫格图片自由切换移动