基础线段树

#include<cstdio>
#include<iostream>
using namespace std;
int n,p,a,b,m,x,y,ans;
struct node
{
int l,r,v,f;
}tree[400001];
void build(int k,int l,int r)//建树
{
tree[k].l=l,tree[k].r=r;
if(tree[k].l==tree[k].r)
{
scanf("%d",&tree[k].v);
return;
}
int m=(l+r)/2;
build(k*2,l,m);
build(k*2+1,m+1,r);
tree[k].v=tree[k*2].v+tree[k*2+1].v;
}
void down(int k)//标记下传
{
tree[k*2].f+=tree[k].f;
tree[k*2+1].f+=tree[k].f;
tree[k*2].v+=tree[k].f*(tree[k*2].r-tree[k*2].l+1);
tree[k*2+1].v+=tree[k].f*(tree[k*2+1].r-tree[k*2+1].l+1);
tree[k].f=0;
}
int ask_point(int k,int x)//单点查询
{
if(tree[k].l==tree[k].r)
{
return tree[k].v;
}
if(tree[k].f) down(k);
int m=(tree[k].l+tree[k].r)/2;
if(x<=m) ask_point(k*2,x);
else ask_point(k*2+1,x);
}
void change_point(int k,int x,int v)//单点修改
{
if(tree[k].l==tree[k].r)
{
tree[k].v+=v;
return;
}
if(tree[k].f) down(k);
int m=(tree[k].l+tree[k].r)/2;
if(x<=m) change_point(k*2,x,v);
else change_point(k*2+1,x,v);
tree[k].v=tree[k*2].v+tree[k*2+1].v;
}
void ask_interval(int k,int a,int b)//区间查询
{
if(tree[k].l>=a&&tree[k].r<=b)
{
ans+=tree[k].v;
return;
}
if(tree[k].f) down(k);
int m=(tree[k].l+tree[k].r)/2;
if(a<=m) ask_interval(k*2,a,b);
if(b>m) ask_interval(k*2+1,a,b);
}
void change_interval(int k,int a,int b,int v)//区间修改
{
if(tree[k].l>=a&&tree[k].r<=b)
{
tree[k].v+=(tree[k].r-tree[k].l+1)*v;
tree[k].f+=v;
return;
}
if(tree[k].f) down(k);
int m=(tree[k].l+tree[k].r)/2;
if(a<=m) change_interval(k*2,a,b,v);
if(b>m) change_interval(k*2+1,a,b,v);
tree[k].v=tree[k*2].v+tree[k*2+1].v;
}
int main()
{
int cas;cin>>cas;
int flag=0;
while(cas--)
{ printf("Case %d:\n",++flag);
int n;scanf("%d",&n);
build(1,1,n);
char s[2000];
int x,y;
while(scanf("%s",s)==1)
{ ans=0;
if(s[0]=='E')break;
scanf("%d%d",&x,&y);
if(s[0]=='A')change_point(1,x,y);
if(s[0]=='S')change_point(1,x,-y);
if(s[0]=='Q'){ask_interval(1,x,y);printf("%d\n",ans);}
}
}
return 0;
  }

树状数组

#include<bits/stdc++.h>
using namespace std; int c[];
int n;
int lowbit(int i)
{
return i&-i;
}
void update(int i,int val)
{
while(i<=n)
{
c[i]+=val;
i+=lowbit(i);
}
}
int sum(int i)
{
int ans=;
while(i>)
{
ans+=c[i];
i-=lowbit(i);
}
return ans;
} int main()
{
int cas;cin>>cas;
for(int k=;k<=cas;k++)
{
memset(c,,sizeof(c));
cin>>n;
for(int i=;i<=n;i++)
{
int x;scanf("%d",&x);
update(i,x);
}
printf("Case %d:\n",k);
char s[];
while(scanf("%s",s)==)
{
if(s[]=='E')break;
int a,b;scanf("%d%d",&a,&b);
if(s[]=='A')update(a,b);
if(s[]=='S')update(a,-b);
if(s[]=='Q')printf("%d\n",sum(b)-sum(a-)); } } }

敌兵布阵 HDU1166的更多相关文章

  1. 敌兵布阵hdu1166

    /* 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  2. 敌兵布阵-HDU1166 点修改+区间查询

    题目:C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况 ...

  3. (线段树)敌兵布阵--hdu--1166 (入门)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1166 自己第一次在没有看题解AC出来的线段树,写的可能不是太好,再贴个学长的代码,学习一下 发现自己的U ...

  4. 暑假集训(2)第四弹 ----- 敌兵布阵(hdu1166)

    D - 敌兵布阵 Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64bit ...

  5. hdu1166敌兵布阵

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. hdu1166 敌兵布阵

    敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动 ...

  7. 线段树 HDU-1166 敌兵布阵

    敌兵布阵是一个线段树典题,题目如下(点此查看题目出处): Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国 ...

  8. HDU-1166敌兵布阵(线段树)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissi ...

  9. hdu1166 敌兵布阵(线段树 求区间和 更新点)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

随机推荐

  1. luogu 2294 狡猾的商人 带权并查集

    此题做法多啊 带权并查集,区间dp,前缀和,差分约束 1.自己写的前缀和, 11 #include<bits/stdc++.h> #define rep(i,x,y) for(regist ...

  2. CTSC&APIO2018游记

    Day-1 布吉岛干什么,好像只看了Splay Day0 再次布吉岛干什么,好像也只看了Splay 然后上了火车 wc没买方便面,只能吃40元的盒饭 半夜睡不着,那应该是我太菜了 Day1 九点下火车 ...

  3. 记录一个PHP安装redis扩展时的问题

    安装过程:https://www.cnblogs.com/pengyunjing/p/8688320.html 由于我之前安装过该扩展,重新安装时没有执行make clean命令,所以安装好出现了下面 ...

  4. Cpp读文件、CString转String、String转CString

    场景 C++读取文件 技术点 读取文件 fstream提供了三个类,用来实现c++对文件的操作.(文件的创建.读.写). ifstream -- 从已有的文件读入 ofstream -- 向文件写内容 ...

  5. Linux驱动技术(三) _DMA编程【转】

    转自:https://www.cnblogs.com/xiaojiang1025/archive/2017/02/11/6389194.html DMA即Direct Memory Access,是一 ...

  6. OA协同办公软件

    OA协同办公软件: 泛微软件. 九思软件. 华天动力. 万户OA.:北京万户网络技术有限公司创立于1998年2月,是北京华宇软件股份有限公司(股票简称:“华宇软件”,股票代码:300271)的全资子公 ...

  7. Win10 + VS2017 15.5.6 环境下解决 Python 3.6 环境无法刷新DB的问题

    作为宇宙第一IDE,VS2017对Python的支持还算可以,虽然和PyCharm等Python专用IDE相比还有些差距,但是经过后续的更新升级,我相信VS2017将越来越完善.由于本人一直都是使用V ...

  8. React-Native 之 项目实战(一)

    前言 本文有配套视频,可以酌情观看. 文中内容因各人理解不同,可能会有所偏差,欢迎朋友们联系我. 文中所有内容仅供学习交流之用,不可用于商业用途,如因此引起的相关法律法规责任,与我无关. 如文中内容对 ...

  9. 005_关于HTTP协议中的保持连接

    缘起 中午在群里讨论,用ab测试 一台只提供静态文件服务, 不与其他任何系统交互的时候,为什么也会产生大量的TIME WAIT状态的. 首先,我们可以简单的理解,在TCP连接的两端,谁主动断开连接(先 ...

  10. pom.xml的第一行报错

    第一行:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or ...