【生活没有希望】hdu1166敌兵布阵 线段树
线段树水题刷刷,生活没有希望
最近看到代码跟树状数组差不多短的非递归线段树,常数也很小——zkw线段树
于是拿道水题练练手
短到让人身无可恋
void add(int pos,int x){ for(pos+=M+;pos;pos/=) a[pos]+=x;}
int que(int l,int r){ for(l+=M,r+=M+,ans=;l^r^;l>>=,r>>=)ans+=((l&)?:a[l|])+((r&)?a[r-]:);return ans;}
单点修改和区间查询(通过前缀和可以变成区间修改单点查询,再加特技标记可以变成区间修区间查)
M=;n+=;
while(M<n)
M*=;
M--;
for(int i=;i<=M+n+;i++)
a[i]=;
初始化(赋初值0是因为这道题多组数据,不然还不用)
#include <cstdio>
int t,n,M,p,l,r,ans,a[];char ch;
void add(int pos,int x){ for(pos+=M+;pos;pos/=) a[pos]+=x;}
int que(int l,int r){ for(l+=M,r+=M+,ans=;l^r^;l>>=,r>>=)ans+=((l&)?:a[l|])+((r&)?a[r-]:);return ans;}
int main()
{
scanf("%d",&t);
for(int T=;T<=t;T++)
{
printf("Case %d:\n",T);
scanf("%d",&n);
M=;n+=;
while(M<n)
M*=;
M--;
for(int i=;i<=M+n+;i++)
a[i]=;
for(int i=;i<=n;i++)
scanf("%d",&p),add(i,p);
for(ch=getchar();ch!='E' && ch!='Q' && ch!='A' && ch!='S';ch=getchar());
while(ch!='E')
{
switch(ch)
{
case'Q':
getchar();getchar();getchar();getchar();
scanf("%d%d",&l,&r);printf("%d\n",que(l,r));
break;
case 'A':
getchar();getchar();
scanf("%d%d",&l,&r);add(l,r);
break;
case 'S':
getchar();getchar();
scanf("%d%d",&l,&r);add(l,-r);
break;
}
for(ch=getchar();ch!='E' && ch!='Q' && ch!='A' && ch!='S';ch=getchar());
}
getchar();getchar();
}
return ;
}
这道水题理论上不需要常数那么小,但是代码短所以还是这么打了
主程序基本都是在输入输出,,,
【生活没有希望】hdu1166敌兵布阵 线段树的更多相关文章
- 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 ...
- hdu1166 敌兵布阵 线段树(区间更新)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU1166 敌兵布阵(线段树)
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...
- HDU1166 敌兵布阵 线段树详解
题解: 更新是线段树的单点更新,简单一点. 有50000个阵营,40000查询,用普通数组肯定超时.区间求和和区间查询问题用线段树最好不过了. 先说说什么是线段树. 区间[1,10]用树的方法存起来, ...
- HDU1166 敌兵布阵 —— 线段树单点修改
题目链接:https://vjudge.net/problem/HDU-1166 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布 ...
- HDU1166 敌兵布阵 [线段树模板]
题意:在序列中修改单点和查询区间和 #include<iostream> #include<cstdio> #include<cstring> #define ls ...
- HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)
HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...
- hdu 1166 敌兵布阵 线段树 点更新
// hdu 1166 敌兵布阵 线段树 点更新 // // 这道题裸的线段树的点更新,直接写就能够了 // // 一直以来想要进线段树的坑,结果一直没有跳进去,今天算是跳进去吧, // 尽管十分简单 ...
随机推荐
- angularjs $scope.$watch(),监听值得变化
myApp.controller('firstController',function($scope,$interval){ $scope.date = new Date(); setInterval ...
- 在XP上运行IIS5.1新建站点
系统问题,XP下IIS5.1不能直接新建站点,因为内核限制只能同时运行一个站点,要想新建站点,必须把当前站点停掉,然后用adsutil.vbs脚本创建,脚本在C:\Inetpub\AdminScrip ...
- BZOJ 2081: [Poi2010]Beads
Description 问把n截成每个长度后不同子串个数. Sol 调和极数+Hash. 首先这是一个式子 \(n\sum_{i=1}^n \frac {1}{i}\) . 这东西就是调和极数再乘上 ...
- C#中base 关键字的作用
引用:http://msdn.microsoft.com/en-us/library/hfw7t1ce.aspx base base 关键字用于从派生类中访问基类的成员: 调用基类上已被其他方法重写的 ...
- javascrit原生实现jquery的append()函数
/** * javascrit原生实现jquery的append()函数 * @param parent * @param text */ function append(parent, text) ...
- Curator Zookeeper分布式锁
Curator Zookeeper分布式锁 pom.xml中添加如下配置 <!-- https://mvnrepository.com/artifact/org.apache.curator/c ...
- maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令
maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository. ...
- Spark on YARN的部署
Spark on YARN的原理就是依靠yarn来调度Spark,比默认的Spark运行模式性能要好的多,前提是首先部署好hadoop HDFS并且运行在yarn上,然后就可以开始部署spark on ...
- 鼠标划过用户名时在鼠标右下角显示div展示用户资料
最近做一个网站论坛,为了方便会员之间相互了解,又不想再做一个页面展示用户资料,就想到了鼠标划过用户名时在鼠标右下角显示div展示用户资料这个效果, 这里要注意的该方法不是给每个用户名的旁边都绑定一个d ...
- October 31st Week 45th Monday 2016
While there is life there is hope. 一息若存,希望不灭. Go on living even if there is no hope. Knowing is not ...