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

最近看到代码跟树状数组差不多短的非递归线段树,常数也很小——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. BZOJ2802——[Poi2012]Warehouse Store

    1.题目巨短,自己看看吧 2.分析:这道题,想了半天dp还是想不到,最后看题解发现是个贪心的思想,我们维护一个堆,如果这个人不能加入就把他和堆上最大的进行比较,然后搞搞就行了 #include < ...

  2. 函数mod(a,m)

    Matlab中的函数mod(a,m)的作用: 取余数 例如: mod(25,5)=0; mod(25,10)=5; 仅此.

  3. POJ 2352 Stars 线段树

    题目链接 题意:在一个二维平面上有n个星星,每个星星的等级为x,x为该星星左方和下方所包含的星星的数量(包含正左和正下的),输出每个等级各有多少星星,星星坐标按照y序递增给出,y值相同按照x递增给出. ...

  4. SQL添加维护 计划失败

    在sql要求数据库每天自动备份这个是大家都会遇到的问题,我遇到了这个问题如图: 是因为这个服务组件没有安装

  5. VC++6.0 Win32 C2065:SM_XVIRTUALSCREEN

    百度了了一大堆,都说让重装vc++6.0,然而并没有什么卵用. 解决办法:找到你的vc6.0安装路径下的WINDOWS.H,将0x0400改为0x0500 Window各个版本对应的宏值WINVER:

  6. Lintcode 166. 主元素

    ----------------------------------- Moore's voting algorithm算法:从一个集合中找出出现次数半数以上的元素,每次从集合中去掉一对不同的数,当剩 ...

  7. C#调用win32 api 操作其它窗口

    实现以下功能: 找到窗体 找到控件(也叫子窗体) 获取内容 获取位置 设置 位置 内容 鼠标点击 示范 1. 找窗体 以操作系统自带的计算器为例 string clWindow = "Cal ...

  8. C/C++面试知识点总结

    1.中缀,后缀,前缀表达式: 后缀表达式是波兰逻辑学家卢卡西维奇(Lukasiewicz)发明的一种表示表达式的方法.这种表示方式把运算符写在运算对象的后面,例如,把a+b写成ab+,所以也称为后缀式 ...

  9. ExtJs基础知识总结:Dom、IFrame和TreePanel、TabPanel(三)

    概述 ExtJs是另外一种操作封装JavaScript的类库与Jquery同类.所以对Dom的操作也是支持的,比如修改Div内Html内容等操作.有几个问题需要思考下: 1.ExtJs也支持IFram ...

  10. POCO库——Foundation组件之缓存Cache

    缓存Cache:内部提供多种缓存Cache机制,并对不同机制的管理缓存策略不同实现: ValidArgs.h :ValidArgs有效键参数类,模板参数实现,_key:键,_isValid:是否有效, ...