敌兵布阵 HDU1166
基础线段树
- #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的更多相关文章
- 敌兵布阵hdu1166
/* 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 敌兵布阵-HDU1166 点修改+区间查询
题目:C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况 ...
- (线段树)敌兵布阵--hdu--1166 (入门)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1166 自己第一次在没有看题解AC出来的线段树,写的可能不是太好,再贴个学长的代码,学习一下 发现自己的U ...
- 暑假集训(2)第四弹 ----- 敌兵布阵(hdu1166)
D - 敌兵布阵 Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB 64bit ...
- hdu1166敌兵布阵
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- hdu1166 敌兵布阵
敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动 ...
- 线段树 HDU-1166 敌兵布阵
敌兵布阵是一个线段树典题,题目如下(点此查看题目出处): Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国 ...
- HDU-1166敌兵布阵(线段树)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissi ...
- hdu1166 敌兵布阵(线段树 求区间和 更新点)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
随机推荐
- Listbox的操作,数据源变化时要及时更新listbox要先把数据源置空,在给数据源绑定数据
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Nginx PHP支持
Nginx 支持 PHP server { server_name www.www1.com www1.com; location / { index index.php index.html; ro ...
- Python的虚拟环境virtualenv
原文地址:blog.sina.com.cn/s/blog_4ddef8f80101eu0w.html Python的虚拟环境可以使一个Python程序拥有独立的库library和解释器interpre ...
- python - 计算器 程序练习
v1.0 计算器(数据内不含括号方式:) import re def jisuan(a,b,c): sun_count = 0 if c =="+": sun_count = st ...
- SpringBoot扩展SpringMVC自动配置
SpringBoot中自动配置了 ViewResolver(视图解析器) ContentNegotiatingViewResolver(组合所有的视图解析器) 自动配置了静态资源文件夹.静态首页.fa ...
- Python中的exec、eval使用实例
Python中的exec.eval使用实例 这篇文章主要介绍了Python中的exec.eval使用实例,本文以简洁的方式总结了Python中的exec.eval作用,并给出实例,需要的朋友可以参考下 ...
- saltstack中如何实现多个master来管理minion
背景: 公司有多个部门,有一些机器有本部门的业务,这些机器也有其他部门的业务,所以本部门需要一个master服务器来管理这批机器,其他部门也需要一个master服务器来管理这个机器,所以就需要多个ma ...
- 转载:2.1 运行中的Nginx进程间的关系《深入理解Nginx》(陶辉)
原文:https://book.2cto.com/201304/19624.html 在正式提供服务的产品环境下,部署Nginx时都是使用一个master进程来管理多个worker进程,一般情况下,w ...
- Go语言规格说明书 之 结构体类型(Struct types)
go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ...
- Android ImageView 的scaleType 属性图解
ImageView 是 Android 中最常用的控件之一,而在使用ImageView时,必不可少的会使用到它的scaleType属性.该属性指定了你想让ImageView如何显示图片,包括是否进行缩 ...