这道题明明是裸的线段树,蒟蒻却80分了五六次。。。

------------

根据题意,显然是维护一棵单点修改区间查询的线段树,于是直接套区间修改的代码。。。

结构体,即为树上的节点。

 struct node{
int l, r;
int val;
} tree[maxn * ];

建树,注意:将读入放到这里来!!原本是在main里面读入然后储存到stu数组中,结果就一直80分!!

 void Build(int l, int r, int pos) { //
tree[pos].l = l;
tree[pos].r = r;
if(l == r) {
int a;
a = read();
tree[pos].val = a;
}
else {
int mid = (l + r) >> ;
Build(l, mid, pos * );
Build(mid + , r, pos * + );
tree[pos].val = max(tree[pos * ].val, tree[pos * + ].val);
}
}

区间修改函数:
1. 如果直接是要求的区间,直接修改即可。
2. 反之则分配到左右子树上面去。
3. 回溯。

 void Update(int l, int r, int d, int pos) {
if(tree[pos].l == l && tree[pos].r == r) {
tree[pos].val = max(d, tree[pos].val);
return ;
}
int mid = (tree[pos].l + tree[pos].r) >> ;
if(r <= mid) Update(l, r, d, pos * );
else if(l > mid) Update(l, r, d, pos * + );
else {
Update(l, mid, d, pos * );
Update(mid + , r, d, pos * + );
}
tree[pos].val = max(tree[pos * ].val, tree[pos * + ].val);
}

区间查询函数:

其实流程和修改挺像的。

 int Query(int l, int r, int pos) {
if(tree[pos].l == l && tree[pos].r == r) {
return tree[pos].val;
}
int mid = (tree[pos].l + tree[pos].r) >> ;
if(r <= mid) return Query(l, r, pos * );
else if(l > mid) return Query(l, r, pos * + );
else {
return max(Query(l, mid, pos * ), Query(mid + , r, pos * + ));
}
}

主要处理部分:

read()是快速读入函数,然后要注意因为本题是单点修改,所以Update函数的l,r两个参数其实是一样的。

 scanf("%s", &op);
l = read(); r = read();
if(op == 'Q') printf("%d\n", Query(l, r, ));
else Update(l, l, r, );

emmm....大概就这么多了。

代码64ms,氧化后36ms。

题解 P1531 【I Hate It】的更多相关文章

  1. 洛谷P1531 I Hate It题解

    题目背景 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 题目描述 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的 ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

随机推荐

  1. (转载) Android开发mac /dev/kvm is not found

    Android开发mac /dev/kvm is not found 标签: KVMAndroid开发KVM is not found芒果Android芒果iOS 2016-10-29 16:31 2 ...

  2. 【原创】Linux下的ngix服务器安装步骤

    1.首先下载ngix的源码linux版本[1.5.8版本] http://nginx.org/en/download.html 2.下载PCRE library,是安装ngix的必备包之一 [root ...

  3. HTML提交表单

    一.使用form提交表单 <form action="#" method="post"> {% csrf_token %} 班级<input ...

  4. BZOJ 3529 [Sdoi2014]数表 (莫比乌斯反演+树状数组+离线)

    题目大意:有一张$n*m$的数表,第$i$行第$j$列的数是同时能整除$i,j$的所有数之和,求数表内所有不大于A的数之和 先是看错题了...接着看对题了发现不会做了...刚了大半个下午无果 看了Po ...

  5. Cause of 400 Bad Request Errors

    The 400 Bad Request error displays inside the Internet browser window, just as web pages do. Cause o ...

  6. 【BZOJ 1207】[HNOI2004]打鼹鼠

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 时间是按顺序的. 所以就有单调性啦. 写个DP就好. 设f[i]表示打第i只鼹鼠,最多能打几只鼹鼠. 则如果i和j的距离不超过它们的 ...

  7. 【codeforces 348B】Apple Tree

    [题目链接]:http://codeforces.com/problemset/problem/348/B [题意] 给你一棵树; 叶子节点有权值; 对于非叶子节点: 它的权值是以这个节点为根的子树上 ...

  8. POJ 3155 Hard Life

    Hard Life Time Limit: 8000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID:  ...

  9. [MST] Build Forms with React to Edit mobx-state-tree Models

    We will expand our UI, and give the user the possibility to edit his wishlist. We will use the earli ...

  10. Session、Cookie总结

    什么是sessnion,session存在哪,能存多久.怎么设置他的存储时间 一.什么是session 1.session 被翻译为会话.当client(一般都是浏览器作为client)訪问serve ...