HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)
来源:互联网 发布:strpos php 编辑:程序博客网 时间:2024/05/18 01:19
http://acm.hdu.edu.cn/showproblem.php?pid=5023
题意:p a b c 就是将a-b区间更新为c.
q a b 就是查询a-b区间的值
输出所有的值(不重复),并且升序输出。
题解:
用线段树的区间更新做。在查询的时候,用一个数组去记录该区间出现的值,最后把该数组排序去重后,就是结果
#include <cstdio>#include<string.h>#include<algorithm>using namespace std;#define LL __int64const int N = 1000000+10;LL t,cnt,ans[N];struct node{ int left, right; LL add;}arr[N*3];void pushDown(int idx){ LL tmp = arr[idx].add; int l = idx << 1, r = (idx << 1) ^ 1; arr[l].add = tmp; arr[r].add = tmp; arr[idx].add = 0;}void build(int idx, int l, int r){ arr[idx].left = l, arr[idx].right = r; arr[idx].add = 0; if(l == r){ arr[idx].add = 2; return ; } int mid = (l + r) >> 1; build(idx * 2, l, mid); build(idx * 2 + 1, mid + 1, r);}void update(int idx, int l, int r, int val){ if(arr[idx].right < l||arr[idx].left > r) return ; if(arr[idx].left >= l&&arr[idx].right <= r){ arr[idx].add = val; return ; } if(arr[idx].add != 0) pushDown(idx); update(idx * 2, l, r, val); update(idx * 2 + 1, l, r, val); return ;}void query(int idx, int l, int r){ if(arr[idx].right < l||arr[idx].left > r) return; if(arr[idx].left >= l&&arr[idx].right <= r&&arr[idx].add!=0){//注意这个地方的arr[idx].add不为零,才是扩展到了查询的区间想要的值 ans[cnt++]=arr[idx].add; return ; } if(arr[idx].add != 0) pushDown(idx); query(idx * 2, l, r); query(idx * 2 + 1, l, r); return;}int main(){ int n, i, q, l, r; char ord[10]; while(~scanf("%d %d", &n, &q),n){ build(1, 1, n); while(q--){ memset(ord,0,sizeof(ord)); scanf("%s", ord); if(ord[0] == 'Q'){ cnt=0; scanf("%d %d", &l, &r); query(1,l,r); sort(ans,ans+cnt); int lastans=unique(ans,ans+cnt)-ans; for(i=0;i<lastans;i++){ if(i!=0) printf(" "); printf("%lld",ans[i]); } puts(""); } else { scanf("%d %d %lld", &l, &r, &t); update(1, l, r, t); } } } return 0;}
0 0
- HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)
- hdu 5023 A Corrupt Mayor's Performance Art (线段树+区间更新+状压)
- hdu 5023 A Corrupt Mayor's Performance Art(线段树区间更新)
- HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)
- HDU 5023 A Corrupt Mayor's Performance Art (线段树区间更新,入门详解)
- HDU 5023 - A Corrupt Mayor's Performance Art(线段树区间更新+状态压缩)
- 【HDU】5023 A Corrupt Mayor's Performance Art 线段树
- hdu 5023 A Corrupt Mayor's Performance Art(线段树)
- HDU 5023 A Corrupt Mayor's Performance Art (线段树)
- HDU 5023 A Corrupt Mayor's Performance Art 线段树 区间染色
- hdu-5023 A Corrupt Mayor's Performance Art (线段树区间修改)
- hdu 5023 A Corrupt Mayor's Performance Art(线段树区间合并)
- hdoj5023A Corrupt Mayor's Performance Art【线段树区间更新】
- 【线段树】 HDU 5025 A Corrupt Mayor's Performance Art
- A Corrupt Mayor's Performance Art+线段树区间更新查询
- hdu5023 A Corrupt Mayor's Performance Art(线段树+区间更新)
- hdu 5023 A Corrupt Mayor's Performance Art(区间更新+set)
- hdu 5023 A Corrupt Mayor's Performance Art 广州网络赛 线段树的区间覆盖+种类查询
- Sum Root to Leaf Numbers
- Android中 View not attached to window manager错误的解决办法
- (转) firstResult/maxResults specified with collection fetch; applying in memory
- UITableView 一直显示滚动条(ScrollBar Indicators)、滚动条Width(宽度)、滚动条Color(颜色)
- 【工作经验】程序员什么时候该考虑辞职
- HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)
- win7 64位 安装oracle 10g “oraparam.ini中未找到先决条件检查”的解决办法汇总
- 行为设计模式---责任链模式(Chain of Responsibility)
- hdoj 5038 Grade【众数】
- android MSM8974 上DeviceTree简介
- 关于java语言和c语言中基本数据类型的长度
- java开源cms,jspxcms-5.1.0-release发布
- Android的Window类
- KMP算法中的next算法解析