hdu 5372 离散化加树状数组
来源:互联网 发布:wifi网络延时高 编辑:程序博客网 时间:2024/05/19 15:21
注意离散化的时候是对左右端点一起离散化的,所以maxn要开成2倍的~
#include<bits/stdc++.h>using namespace std;#define ll long longconst int maxn=2e5+10;struct node{ int op,l,r;}a[maxn];int c1[maxn<<1],c2[maxn<<1];int lowbit(int x){ return x&(-x);}void update(int n,int num,int *c){ while(n<maxn*2){ c[n]+=num;n+=lowbit(n); }}int query(int n,int *c){ int ans=0; while(n>0){ ans+=c[n];n-=lowbit(n); } return ans;}int n,op,l,r;int cas;int b[maxn<<1];int opt[maxn<<1];vector<int>vec;int main(){ cas=1; while(scanf("%d",&n)!=EOF){ int num=1;vec.clear();int cnt=0; memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); for(int i=1;i<=n;i++){ scanf("%d%d",&op,&l); if(op==0){ r=l+num;opt[num]=i;num++; b[cnt++]=l;b[cnt++]=r; } a[i].op=op;a[i].l=l;a[i].r=r; } sort(b,b+cnt); cnt=unique(b,b+cnt)-b; // cout<<"sz = "<<cnt<<endl; // for(int i=0;i<cnt;i++){ // cout<<"i = "<<i<<" b [i] = "<<b[i]<<endl; // } // int now=lower_bound(b,b+cnt,5)-b+1; // cout<<" now = "<<now<<endl;*/ int num1;int num2; printf("Case #%d:\n",cas++); for(int i=1;i<=n;i++){ if(a[i].op==0){ l=lower_bound(b,b+cnt,a[i].l)-b+1; r=lower_bound(b,b+cnt,a[i].r)-b+1; num1=query(l-1,c1); num2=query(r,c2); //cout<<" l= "<<l<<" r= "<<r<<endl; //cout<<" num1= "<<num1<<" num2= "<<num2<<endl; printf("%d\n",num2-num1); update(l,1,c1); /* cout<<" update check "<<endl; for(int i=1;i<=cnt;i++){ cout<<" i = "<<i<<" cnt= "<<c1[i]<<endl; }*/ update(r,1,c2); } else{ l=opt[a[i].l];int j=l; // cout<<" (((( l= "<<l<<endl; // cout<<" ====== "<<a[l].l<<" a[r].r = "<<a[l].r<<endl; // system("pause"); l=lower_bound(b,b+cnt,a[j].l)-b+1; r=lower_bound(b,b+cnt,a[j].r)-b+1; //system("pause"); update(l,-1,c1); update(r,-1,c2); } } }}
0 0
- hdu 5372 离散化加树状数组
- HDU 5372 (树状数组 离散化)
- 反向树状数组 + 离散化 HDU 5372
- Segment Game (hdu 5372 树状数组+离散化)
- hdu 5372 Segment Game(树状数组+离散化)
- hdu 5372 Segment Game (树状数组+离散化)
- HDU 5372 Segment Game (树状数组+离散化)
- HDU 5372 Segment Game (MUT#7 树状数组+离散化)
- HDU 5372 Segment Game - 离散化&树状数组
- 树状数组,离散化,突破口(Segment Game,HDU 5372)
- HDU-4358-树状数组+离散化
- hdu 3874 树状数组+离散化
- HDU 5101 Select --离散化+树状数组
- hdu 4605(树状数组+离散化)
- HDU 3743 (树状数组,离散化)
- HDU 5654 (树状数组 离散化)
- HDU 5714 (离散化 树状数组)
- hdu 5792 离散化+树状数组
- leetcode #69 in cpp
- C++小里程
- jstorm源码分析:work管理
- UITextField详细应用
- ALPHA_8 , ARGB_4444 , ARGB_8888 , RGB_565区别
- hdu 5372 离散化加树状数组
- Java构造方法和析构方法
- c语言获取文件目录
- ibatis在debug时打印完整的SQL语句
- c++获取本地ip
- 序列化实现对象的拷贝
- Android中Activity的启动和退出动画
- Android studio gradle无法停止的问题
- 【BZOJ1570】[JSOI2008]Blue Mary的旅行【最大流】