【线段树】 HDOJ 4417 Super Mario
来源:互联网 发布:windows激活密匙在哪里 编辑:程序博客网 时间:2024/05/23 13:17
线段树水题。。。一开始query写错了。。TLE了好久。。
#include <iostream> #include <queue> #include <stack> #include <map> #include <set> #include <bitset> #include <cstdio> #include <algorithm> #include <cstring> #include <climits> #include <cstdlib>#include <cmath>#include <time.h>#define maxn 100005#define maxm 40005#define eps 1e-10#define mod 1000000007#define INF 999999999#define lowbit(x) (x&(-x))#define mp mark_pair#define ls o<<1#define rs o<<1 | 1#define lson o<<1, L, mid #define rson o<<1 | 1, mid+1, R typedef long long LL;//typedef int LL;using namespace std;LL powmod(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base%mod;base=base*base%mod;b/=2;}return res;}void scanf(int &__x){__x=0;char __ch=getchar();while(__ch==' '||__ch=='\n')__ch=getchar();while(__ch>='0'&&__ch<='9')__x=__x*10+__ch-'0',__ch = getchar();}LL gcd(LL _a, LL _b){if(!_b) return _a;else return gcd(_b, _a%_b);}// headstruct point{int v, p;}po[maxn];struct node{int a, b, c, id;}op[maxn];int sum[maxn<<2];int res[maxn];int p, ql, qr, n, m;int cmp1(point a, point b){return a.v < b.v;}int cmp2(node a, node b){return a.c < b.c;}void read(void){memset(sum, 0, sizeof sum);scanf("%d%d", &n, &m);for(int i = 1; i <= n; i++) {scanf("%d", &po[i].v);po[i].p = i;}for(int i = 1; i <= m; i++) scanf("%d%d%d", &op[i].a, &op[i].b, &op[i].c), op[i].id = i, op[i].a++, op[i].b++;}void updata(int o, int L, int R){if(L == R) {sum[o]++;return;}int mid = (L+R)>>1;if(p <= mid) updata(lson);else updata(rson);sum[o] = sum[ls] + sum[rs];}int query(int o, int L, int R){if(ql <= L && qr >= R) return sum[o];int mid = (L+R)>>1, ans = 0;if(ql <= mid) ans += query(lson);if(qr > mid) ans += query(rson);return ans;}void work(void){sort(po+1, po+n+1, cmp1);sort(op+1, op+m+1, cmp2);for(int i = 1, j = 1; i <= m; i++) {while(j <= n && po[j].v <= op[i].c) p = po[j++].p, updata(1, 1, n);ql = op[i].a, qr = op[i].b;res[op[i].id] = query(1, 1, n);}for(int i = 1; i <= m; i++) printf("%d\n", res[i]);}int main(void){int _, __;while(scanf("%d", &_)!=EOF) {__ = 0;while(_--) {read();printf("Case %d:\n", ++__);work();}}return 0;}
0 0
- 【线段树】 HDOJ 4417 Super Mario
- HDOJ 4417: Super Mario
- HDOJ 4417 Super Mario
- 线段树 super mario
- hdu 4417 Super Mario(线段树)
- hdu 4417 Super Mario(线段树+STL)
- 【HDU】4417 Super Mario 线段树
- HDU 4417 Super Mario(离线线段树)
- HDU 4417 Super Mario // 线段树
- HDU 4417 Super Mario(线段树)
- HDOJ 4417 Super Mario 线段树 单点更新 成段查询
- HDOJ 4417 - Super Mario 线段树or树状数组离线处理..
- hdu 4417 Super Mario 划分树(线段树)
- HDU 4417 Super Mario(线段树离线处理/主席树)
- hdu 4417 Super Mario 线段树离线查询
- hdu 4417 Super Mario (线段树+动态数组)
- [线段树+离线处理] hdu 4417 Super Mario
- HDU ACM 4417 Super Mario 离线线段树
- Markdown试用及语法
- 日本为心神战机研制新发动机 预算8000亿
- test
- windows7 key 和 windows server 2012 R2 激活key
- 在程序中打开另一个程序
- 【线段树】 HDOJ 4417 Super Mario
- 网络编程
- android 打开文本
- xamarin.ios 设置用户默认信息
- LPC1114功耗问题笔记(研究更新)
- 用js获取url各部分参数
- ubuntu14.04 u盘安装教程
- 比树莓派配置好接地气的香蕉派上手初体验
- 如何检测浏览器是否支持HTML5