POJ 2352 Stars (区间建树,单点更新)
来源:互联网 发布:淘宝上哪家店牛仔裤好 编辑:程序博客网 时间:2024/06/16 02:36
思路:刚开始自己没有想到建图的方式,参考了他人的方法明白过来,将x轴当做区间,一边查找一边更新。更新的话就是将当前的数加入到合适位置的和中去,即可。
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<queue>#include<math.h>#define LL long long#define inf 0x3f3f3f3f#define ls l,mid,rt<<1#define rs mid+1,r,rt<<1|1#define M 1000100using namespace std;int sum[M*4],ha[M*4];struct node{ int x,y;}q[M*4];void up(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1];}void pushup(int x,int l,int r,int rt){ if(l==r) { sum[rt]++;return ; } int mid=(l+r)>>1; if(x<=mid) pushup(x,ls); else pushup(x,rs); up(rt);}int Q(int a,int b,int l,int r,int rt){ if(l>=a&&r<=b) { return sum[rt]; } int mid=(l+r)>>1; int s=0; if(a<=mid) s+=Q(a,b,ls); if(b>mid) s+=Q(a,b,rs); return s;}int main(){ int i,n,j,k,ma; while(~scanf("%d",&n)) { ma=0; memset(sum,0,sizeof(sum)); for(i=0;i<n;i++) { scanf("%d%d",&q[i].x,&q[i].y); ma=max(ma,q[i].x); } for(i=0;i<n;i++) { int p=Q(0,q[i].x,0,ma,1); ha[p]++; pushup(q[i].x,0,ma,1); } for(i=0;i<n;i++) printf("%d\n",ha[i]); } return 0;}
0 0
- POJ 2352 Stars (区间建树,单点更新)
- POJ 2352 Stars 线段树 单点更新 成段求和
- POJ 2352 Stars(线段树单点更新)
- POJ 2352 Stars(树状数组||线段树单点更新)
- [模板]线段树的建树、查询、单点更新、区间更新
- 线段树之建树,单点更新以及区间查询
- 【树状数组--单点更新区间求和】 hdu1541 Stars
- hdu 2642 Stars(二维数组 单点更新 区间查询)
- Stars+POJ+数状数组+单点修改+区间查询。
- HUD.2795 Billboard ( 线段树 区间最值 单点更新 单点查询 建树技巧)
- hdu 3974 Assign the task(区间建树)(区间更新+单点查询)
- POJ 3237 Tree(树链剖分 + 单点更新 + 区间更新 + 区间查询)
- hdoj 1541 Stars 【树状数组 线段树】【单点更新 区间求和】
- Stars 单点修改+区间查询
- !POJ 2352 左下角星星-线段树-(单点更新,区间查询)
- poj 2155 Matrix 树状数组 区间更新单点求值
- POJ 2828 Buy Tickets(单点更新 区间求和)
- POJ 2155 - Matrix 二维树状数组..区间更新..单点查询
- python基础教程共60课-第3课IDE
- LibSVM C/C++
- 53,类方法
- project euler 37
- E-栈--括号匹配
- POJ 2352 Stars (区间建树,单点更新)
- project euler 38
- 折腾了一个晚上,终于发表了第一篇学习技术博客,
- 终端卸载Ubuntu软件
- light--oj--1116--Ekka Dokka(数学问题)
- Java笔记(变量&常量&数据类型)
- cfB - Art Union
- HTML 元素和属性--备份
- project euler 39