hdu 1166 敌兵布阵(线段树,树状数组)
http://acm.hdu.edu.cn/showproblem.php?pid=1166
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- using namespace std;
- struct node
- {
- int l; //左起点
- int r; //右终点
- int sum; //区间数据总和
- };
- node p[200004];
- int a[50001];
- int n;
- void biuld(int k, int l, int r) //创建
- {
- int mid;
- p[k].l = l;
- p[k].r = r;
- if(l == r)
- {
- p[k].sum = a[l];
- return ;
- }
- mid = (l+r)/2;
- biuld(k*2,l,mid);
- biuld(k*2+1,mid+1,r);
- p[k].sum = p[k*2].sum+p[k*2+1].sum;
- return ;
- }
- int find(int k, int l, int r) //查找区间的值
- {
- int mid;
- if(p[k].l==l && p[k].r==r) //找到这个区间
- {
- return p[k].sum;
- }
- mid = (p[k].l+p[k].r)/2;
- if(l>mid) //在中点的右孩子
- {
- return find(k*2+1,l,r);
- }
- if(r<=mid) //在中点得左孩子
- {
- return find(k*2,l,r);
- }
- return find(k*2,l,mid) + find(k*2+1,mid+1,r);
- }
- void update(int k, int x, int y) //更新数据
- {
- int mid;
- if(p[k].l==x && p[k].r==x) //如果找到这个点
- {
- p[k].sum = y; //更新数据
- return ;
- }
- mid = (p[k].l+p[k].r)/2;
- if(x<=mid)
- {
- update(k*2,x,y);
- }
- else
- {
- update(k*2+1,x,y);
- }
- p[k].sum=p[k*2].sum+p[k*2+1].sum;
- return ;
- }
- int main()
- {
- int t,i,k,x,y,m;
- char cz[7];
- scanf("%d",&t);
- k = 0;
- while(t--)
- {
- k++;
- scanf("%d",&n);
- for(i = 1; i <= n; i++)
- {
- scanf("%d",&a[i]);
- }
- biuld(1,1,n);
- printf("Case %d:\n",k);
- while(1)
- {
- scanf("%s",&cz);
- if(cz[0]=='E')
- {
- break;
- }
- scanf("%d%d",&x,&y);
- switch(cz[0])
- {
- case 'Q':
- {
- printf("%d\n",find(1,x,y));
- break;
- }
- case 'A':
- {
- a[x]+=y;
- m = a[x];
- update(1,x,m);
- break;
- }
- case 'S':
- {
- a[x]-=y;
- m = a[x];
- update(1,x,m);
- }
- }
- }
- }
- return 0;
- }
hdu 1166 敌兵布阵(线段树,树状数组)的更多相关文章
- HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)
HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...
- hdu 1166 敌兵布阵 线段树 点更新
// hdu 1166 敌兵布阵 线段树 点更新 // // 这道题裸的线段树的点更新,直接写就能够了 // // 一直以来想要进线段树的坑,结果一直没有跳进去,今天算是跳进去吧, // 尽管十分简单 ...
- HDU 1166 敌兵布阵(线段树单点更新,板子题)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU 1166 敌兵布阵(线段树单点更新)
敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...
- HDU 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 1166 敌兵布阵 <线段树 单点修改 区间查询>
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 1166 敌兵布阵 (线段树、单点更新)
敌兵布阵Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- hdu 1166 敌兵布阵 线段树区间修改、查询、单点修改 板子题
题目链接:敌兵布阵 题目: C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视 ...
- HDU 1166 敌兵布阵 线段树
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU 1166 - 敌兵布阵 - [线段树][树状数组]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...
随机推荐
- mysql时间与字符串相互转换
时间.字符串.时间戳之间的互相转换很常用,但是几乎每次使用时候都喜欢去搜索一下用法:本文整理一下三者之间的 转换(即:date转字符串.date转时间戳.字符串转date.字符串转时间戳.时间戳转da ...
- python中decorator
先讲一下python中的@符号 看下面代码 @f @f2 def fun(args, args2, args3, args4, ……): pass 上面代码相当于 def fun(args, args ...
- 设计模式值六大原则——依赖倒置原则 (DIP)
依赖倒置原则(Dependence Inversion Principle,DIP)的原始定义: 高层模块不应该依赖底层模块,两者都应该依赖其抽象: 抽象不应该依赖细节: 细节应该依赖抽象. 依赖倒置 ...
- jQuery源码,匿名函数自执行
jQuery框架的首尾是这样写的()(), (function(window){//这个window是个入参,随便起个名字都行 //这里面全都是js代码 })(window)//这个括号里的windo ...
- 使用JS进行pc端、手机端判断
<script type="text/javascript"> (function(){ var ua = nav ...
- uva 11077 置换
/** 给定一个置换,看能不能存在一个置换A^2 = B 思路; 循环节长度为偶数n的置换只能由循环节长度为长度2*n 的置换A*A 而变得.所以只需求出循环节,看循环节长度为偶数的个数是否为偶数个即 ...
- 转: sublime text 2 前端编码神器-快捷键与使用技巧介绍
代码编辑器或者文本编辑器,对于程序员来说,就像剑与战士一样,谁都想拥有一把可以随心驾驭且锋利无比的宝剑,而每一位程序员,同样会去追求最适合自己的强大.灵活的编辑器,相信你和我一样,都不会例外. 如果说 ...
- Qt5制作鼠标悬停显示Hint的ToolTip
在日常生活中的使用的软件中,我们经常会遇到这样的情况. 我们在网页上,有些网页链接的文字(比如文章标题,知乎问题标题,百度的词条等)因为太长了,而显示不出来,但是鼠标悬停在上面的时候就可以显示出来. ...
- 「操作系统」: Conditional Move Instructions(trap)
Not all conditional expressions can be compiled using conditional moves. Most significantly, the abs ...
- fedora21 codeblocks在编辑装态下无法输入
来自:http://forum.ubuntu.com.cn/viewtopic.php?f=88&t=284409 用codeblocks,突然发现怎么敲键盘都不能输入 搜索后得知: Co ...