hdu 4638 Group(树状数组)
来源:互联网 发布:学做淘宝到哪里去学 编辑:程序博客网 时间:2024/06/04 18:52
题目链接:hdu 4638 Group
代码
#include <cstdio>#include <cstring>#include <vector>#include <algorithm>using namespace std;#define lowbit(x) ((x)&(-x))const int maxn = 100005;typedef pair<int,int> pii;int N, fenw[maxn];void add(int x, int v) { while (x <= N) { fenw[x] += v; x += lowbit(x); }}int sum(int x) { int ret = 0; while (x) { ret += fenw[x]; x -= lowbit(x); } return ret;}int M, A[maxn], P[maxn], ans[maxn];vector<pii> G[maxn];void init () { scanf("%d%d", &N, &M); for (int i = 1; i <= N; i++) { scanf("%d", &A[i]); G[i].clear(); } memset(P, -1, sizeof(P)); memset(fenw, 0, sizeof(fenw)); int l, r; for (int i = 1; i <= M; i++) { scanf("%d%d", &l, &r); G[l].push_back(make_pair(r, i)); }}void solve () { for (int i = N; i; i--) { add(i, 1); P[A[i]] = i; int pre = P[A[i]-1], suf = P[A[i]+1]; if (pre != -1) add(pre, -1); if (suf != -1) add(suf, -1); for (int j = 0; j < G[i].size(); j++) { int r = G[i][j].first; int k = G[i][j].second; ans[k] = sum(r) - sum(i-1); } }}int main () { int cas; scanf("%d", &cas); while (cas--) { init(); solve(); for (int i = 1; i <= M; i++) printf("%d\n", ans[i]); } return 0;}
0 0
- hdu 4638 Group (树状数组+离线)
- HDU 4638 Group(离线 + 树状数组)
- hdu 4638 Group(树状数组)
- hdu 4638 Group 树状数组
- HDU 4638 Group(树状数组)
- HDU 4638 Group (树状数组)
- hdu-4638-Group-(树状数组,离线操作)
- Hdu 4638 Group 离线+树状数组
- HDU 4638 - Group(树状数组 / 线段树)
- hdu 4638 Group (离线树状数组)
- HDU 4638 Group [离线+树状数组]
- HDU 4638Group 树状数组离线
- hdu 多校contest4 group(树状数组)
- HDU 4638 Group 【树状数组,分块乱搞(莫队算法?)】
- 离线处理(线段树|树状数组)| 莫对算法 —— HDU 4638 Group
- 【树状数组】 HDOJ 4638 Group
- hdu4638 Group(树状数组)
- hdu 4638 树状数组
- 数位DP问题
- 从左到右升序,从上到下升序的元素互异的二维数组元素查找问题
- javascript
- Hive sql 执行计划实例1
- LeetCode Maximum Subarray和编程之美 求数组的子数组之和的最大值
- hdu 4638 Group(树状数组)
- MySQL数据库INNODB 表损坏修复处理过程 无法repair的变通方法
- 一个标签多个css属性
- 欢迎使用CSDN-markdown编辑器
- 算数-基本四则运算
- Java学习——2——对象操作
- django下video播放时间不能超过5s并且视频有时无法显示问题的解决方法
- cocoaPods
- HDU 3065 病毒侵袭持续中(AC自动机)