线段树水题刷刷,生活没有希望

最近看到代码跟树状数组差不多短的非递归线段树,常数也很小——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敌兵布阵 线段树的更多相关文章

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

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

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

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

  3. hdu1166 敌兵布阵 线段树(区间更新)

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

  4. HDU1166 敌兵布阵(线段树)

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

  5. HDU1166 敌兵布阵 线段树详解

    题解: 更新是线段树的单点更新,简单一点. 有50000个阵营,40000查询,用普通数组肯定超时.区间求和和区间查询问题用线段树最好不过了. 先说说什么是线段树. 区间[1,10]用树的方法存起来, ...

  6. HDU1166 敌兵布阵 —— 线段树单点修改

    题目链接:https://vjudge.net/problem/HDU-1166 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布 ...

  7. HDU1166 敌兵布阵 [线段树模板]

    题意:在序列中修改单点和查询区间和 #include<iostream> #include<cstdio> #include<cstring> #define ls ...

  8. HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)

    HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...

  9. hdu 1166 敌兵布阵 线段树 点更新

    // hdu 1166 敌兵布阵 线段树 点更新 // // 这道题裸的线段树的点更新,直接写就能够了 // // 一直以来想要进线段树的坑,结果一直没有跳进去,今天算是跳进去吧, // 尽管十分简单 ...

随机推荐

  1. bzoj4314

    首先,我们考虑原题取消k的限制后怎么做. 设(xy)是一个n次单位根,f(x)=(1+x^0)*(1+x^1)*(1+x^2)*...*(1+x^n-1) 参见 http://bx2k.is-prog ...

  2. SQL分组多列统计(GROUP BY后按条件分列统计)

    as tjsl from fyxx group by zt,whbmbh end) as ybhsl from fyxx group by whbmbh 下面是摘自别人的博客 最近遇到一个问题,需要对 ...

  3. 使用KRPano资源分析工具还原全景图片

    软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...

  4. java多线程中关于join方法的使用

    Thread的非静态方法join()让一个线程B"加入"到另外一个线程A的尾部.在A执行完毕之前,B不能工作.例如:         Thread t = new MyThread ...

  5. CDR VBA鼠标选择

    Dim x As Double, y As Double, Shift As Long, b As Boolean, doc As Document Dim sel1 As Shape, sel2 A ...

  6. asp.net mvc ajax FileUpload

    //后台代码 [HttpPost] public ActionResult CreateCategory(HttpPostedFileBase file) { string url = Upload( ...

  7. 把 excel 和 mysq l数据库相互转换

    不用代码轻松搞定,参考http://jingyan.baidu.com/article/fc07f9891cb56412ffe5199a.html 1.excel 转 mysql a.首先确认你的数据 ...

  8. css3 自定义字体 @font-face

    CSS3 @font-face 规则 在 CSS3 之前,web 设计师必须使用已在用户计算机上安装好的字体. 通过 CSS3,web 设计师可以使用他们喜欢的任意字体. 当您您找到或购买到希望使用的 ...

  9. 关于 android 的setOnItemClickListener 和 setOnItemLongClickListener 同时触发的解决方法

    关于 android 的setOnItemClickListener 和 setOnItemLongClickListener 同时触发的解决方法. 其实方法也是很简单 的主要 setOnItemLo ...

  10. mysql 创建用户、授权等操作

    一, 创建用户: 命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明:username - 你将创建的用户名, host - 指 ...