A - 敌兵布阵 (HDU - 1166)
- 题目大意
中文题,一共有4种命令,然后来根据命令来进行操作。
- 解题思路
典型的线段树的问题,进行点的更新,然后进行区间的查询(查询的时候查的是这个区间上的点的和)。
- 代码
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=50001;
int ans;
struct node
{int l,r,sum;
}t[4*maxn];void build(int l,int r,int k)
{int mid;if(l==r){t[k].l=l;t[k].r=r;t[k].sum=0;return;}mid=(l+r)/2;t[k].l=l;t[k].r=r;t[k].sum=0;build(l,mid,2*k);build(mid+1,r,2*k+1);
}void add(int n,int d,int k)
{int mid;if(t[k].l==t[k].r&&t[k].l==d){t[k].sum+=n;return;}mid=(t[k].r+t[k].l)/2;if(d<=mid)add(n,d,2*k);elseadd(n,d,2*k+1);t[k].sum=t[2*k].sum+t[2*k+1].sum;
}void findd(int l,int r,int k)
{int mid;if(t[k].l==l&&t[k].r==r){ans+=t[k].sum;return;}mid=(t[k].r+t[k].l)/2;if(r<=mid)findd(l,r,2*k);else if(l>mid)findd(l,r,2*k+1);else{findd(l,mid,2*k);findd(mid+1,r,2*k+1);}}char str[20];
int main()
{int n,x,y;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&x);build(1,x,1);for(int j=1;j<=x;j++){scanf("%d",&y);add(y,j,1);}printf("Case %d:\n",i);while(scanf("%s",str),strcmp(str,"End")){int a,b;scanf("%d%d",&a,&b);if(strcmp(str,"Add")==0)add(b,a,1);else if(strcmp(str,"Sub")==0)add(-b,a,1);else{ans=0;findd(a,b,1);printf("%d\n",ans);}}}return 0;
}
转载于:https://www.cnblogs.com/alpacadh/p/8521559.html
A - 敌兵布阵 (HDU - 1166)相关推荐
- A - 敌兵布阵 - hdu 1166
Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些 ...
- 敌兵布阵 HDU - 1166 (线段树)
线段树模板题: 1 #include<iostream> 2 #include<vector> 3 #include<string> 4 #include<c ...
- 【 HDU 1166】 敌兵布阵 树状数组从0到1
如果给你一个数组,让你求某个区间的和,你很自然会想到遍历一遍数组,复杂度是O(n),但是如果有多次询问呢,你也许会想到用前缀数组,通过O(n)的预处理,达到O(1)的查询,但是如果要更新某个元素的值呢 ...
- 【HDU No. 1166】 敌兵布阵
[HDU No. 1166] 敌兵布阵 杭电 OJ 题目地址 [题意] A国在海岸线沿直线布置了N 个工兵营地.C国通过先进的监测手段对A国每个工兵营地的人数都掌握得一清二楚.每个工兵营地的人数都可能 ...
- 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 ...
最新文章
- myeclipse 如何显示序号
- Kafka设计解析(二):Kafka High Availability (上)-转
- 在ubuntu14.04 64位中使用jd-gui
- 华三交换机ping不通用户但用户_H3C故障常见故障及解决方案
- ThreadLocal的使用[代码片段]
- 基于Swoole和Redis实现的并发队列处理系统 1
- 文件类的操作 File c# 1614823687
- UnicodeDecodeError: 'gbk' codec can't decode byte 0xd2 in position 85: illegal multibyte sequence
- pku1063 Flip and Shift严格证明
- 台企招聘一名PHP程序員
- FISCO BCOS(五)———部署安装jdk1.8
- C#Socket客户端
- 计算机大学职业规划2000字论文格式,大学生职业生涯规划2000字论文
- 机器学习算法:K近邻(k-nearest neighbors)
- WebRTC 音视频同步分析
- 单片机——神奇的中断嵌套实验
- Bert 论文中文翻译
- 卡特兰数列(Catalan)
- 个人支付宝、微信、云闪付收款
- 得移动互联网者得天下