博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 4031 树状数组 区间更新及点询问
阅读量:2440 次
发布时间:2019-05-10

本文共 3001 字,大约阅读时间需要 10 分钟。

/*******************************************************************************    去年成都赛区网络赛一道题,树状数组在区间更新中的应用。树状数组一般支持的是改点,查区间,但是这道题要求的是改区间,查点,这就要变通一下,具体可以看代码,另外要考虑的一个问题是,如何统计?这里的处理方法就是把总共的攻击次数-防御的次数,因为对单个点的询问可能有多次,所以为每个点都设定一个游标来优化时间~*******************************************************************************/#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define LOWBIT(x) ( (x) & ( (x) ^ ( (x) - 1 ) ) )#define CLR(x, k) memset((x), (k), sizeof(x))#define CPY(t, s) memcpy((t), (s), sizeof(s))#define SC(t, s) static_cast
(s)#define LEN(s) static_cast
( strlen((s)) )#define SZ(s) static_cast
( (s).size() )typedef double LF;typedef __int64 LL; //VCtypedef unsigned __int64 ULL;typedef pair
PII;typedef pair
PLL;typedef pair
PDD;typedef vector
VI;typedef vector
VC;typedef vector
VF;typedef vector
VS;template
T sqa(const T & x) {return x * x;}template
T ll(const T & x) {return x << 1;}template
T rr(const T & x) {return x << 1 | 1;}template
T gcd(T a, T b) { if (!a || !b) { return max(a, b); } T t; while (t = a % b) { a = b; b = t; } return b;};const int INF_INT = 0x3f3f3f3f;const LL INF_LL = 0x7fffffffffffffffLL; //15fconst double oo = 10e9;const double eps = 10e-7;const double PI = acos(-1.0);#define ONLINE_JUDGEconst int MAXN = 20004;int test, n, q, t;int tree[MAXN];int crs[MAXN], def[MAXN];vector
vp;void updateBIT(int x, int inc){ for (int i = x; i > 0; i -= LOWBIT(i)) { tree[i] += inc; } return ;}void updateSeg(int l, int r, int inc){ updateBIT(l - 1, -inc); updateBIT(r, inc); return ;}int queryBIT(int x){ int sum = 0; for (int i = x; i <= n; i += LOWBIT(i)) { sum += tree[i]; } return sum;}void ace(){ int cas = 1; char op[10]; int l, r, p; for (scanf("%d", &test); test--; ++cas) { scanf("%d %d %d", &n, &q, &t); CLR(tree, 0); CLR(crs, 0); CLR(def, 0); vp.clear(); int ind = 0; printf("Case %d:\n", cas); while (q--) { scanf("%s", op); if ('A' == op[0]) { scanf("%d %d", &l, &r); if (l > r) { swap(l, r); } //l = max(l, 1); //r = min(r, n); updateSeg(l, r, 1); vp.push_back(PII(l, r)); ++ind; } else { scanf("%d", &p); if (1 == t) { puts("0"); continue ; } int token = 0; while (crs[p] < ind) { if (vp[ crs[p] ].first <= p && p <= vp[ crs[p] ].second) { if (0 == token % t) { crs[p] += t - 1; ++def[p]; token = t - 1; } ++token; } ++crs[p]; } printf("%d\n", queryBIT(p) - def[p]); } } } return ;}int main(){#ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout);#endif ace(); return 0;}/*******************************************************************************Test Data...23 7 2Attack 1 2Query 2Attack 2 3Query 2Attack 1 3Query 1Query 39 7 3Attack 5 5Attack 4 6Attack 3 7Attack 2 8Attack 1 9Query 5Query 3*******************************************************************************/

转载地址:http://mibqb.baihongyu.com/

你可能感兴趣的文章
vue.js 自定义组件_向自定义Vue.js组件添加v模型支持
查看>>
vue 模板语法_使用Vue模板语法构建照片库
查看>>
拖动滑块图像验证码vue_如何使用Vue.js创建图像滑块
查看>>
sass导入sass_速记Sass Mixins
查看>>
spring react_使用React Spring在React中介绍动画
查看>>
vue获取路由的数据_使用Vue进行更高级的路由:数据获取
查看>>
Node.js中的路径模块简介
查看>>
angular i18n_如何在Angular中使用国际化(i18n)
查看>>
vue概述_Vue 3中的新功能概述
查看>>
go 创建自定义包_在Go中创建自定义错误
查看>>
prisma 风格设置_Prisma中的身份验证-第1部分:设置
查看>>
canvas动画:黑客帝国_使用Canvas API进行动画处理-第3部分:重力和动态渲染
查看>>
golang 结构体标签_如何在Go中使用结构标签
查看>>
canvas 绘制图片形状_使用JavaScript Canvas API绘制形状
查看>>
flutter顶部小部件_使用VoidCallback和Function(x)与Flutter进行小部件通信
查看>>
JavaScript中的getOwnPropertyDescriptors方法
查看>>
使用Express在Node.js中进行条带支付简介
查看>>
node.js运行js_如何使用Node.js创建和运行计划的作业
查看>>
react 滚动条组件_使用React和样式化组件的页面滚动进度条
查看>>
vue事件处理有哪些方法_Vue事件处理方法
查看>>