<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      P2650 彈幕考察 題解

      題目鏈接

      本人博客

      前言

      做法1:樹狀數組

      做法2:二分

      以上兩個做法在本篇題解中均會涉及。

      筆者一拿到這個題,就想到了用數據結構維護一個查詢區間內原區間的個數。再一看是明顯是離線查詢,故想到了樹狀數組。打完之后點開標簽,發現竟然有二分的標簽,于是看了題解,才恍然大悟,發現原來這個題原來可以這么簡單?!

      有些人啊,就是學數據結構學傻了。
      連差分都要用線段樹做。
      —— XXXXXXX

      做法1:樹狀數組

      從后往前維護樹狀數組,統計答案。

      注意到數據,發現沒有辦法維護如此之巨大的樹狀數組,怎么辦?

      答案就是-離散化!

      \(\color{red}{\text{注意:離散化后數組大小一定想好要開多大!}}\) 筆者就是這里被卡了 \(5\) 發。

      代碼

      #include<cstdio>
      #include<iostream> 
      #include<cstring>
      #include<algorithm>
      #include<queue>
      using namespace std;
      #define int long long 
      inline int Read(){
      	int x=0,f=1;
      	char c=getchar();
      	while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
      	while(isdigit(c)){x=x*10+c-48;c=getchar();}
      	return x*f;
      }
      inline void Write(int x){
      	if(x<0){x=-x;putchar('-');}
      	if(x>9) Write(x/10);
      	putchar(x%10+'0');
      }
      const int N=1e6+10;
      int n,m,rr;
      //rr:統計離散化后最右邊的數字
      int li[N],totl=0;
      int ans[N];
      struct node{
      	int l,r,id;
      }a[N],q[N]; 
      //a:原區間,q:查詢區間
      bool cmp1(node A,node B){return A.r>B.r;}
      bool cmp2(node A,node B){return A.l>B.l;}
      //樹狀數組板子
      int c[N*5];
      int lowbit(int x){
      	return x&(-x);
      }
      void change(int pos,int v){
      	while(pos<=rr){
      		c[pos]+=v;
      		pos+=lowbit(pos);
      	}
      }
      int query(int pos){
      	int res=0;
      	while(pos){
      		res+=c[pos];
      		pos-=lowbit(pos);
      	}
      	return res;
      }
      signed main(){
      	n=Read();m=Read();
      	for(int i=1;i<=n;i++){
      		a[i].l=Read()+1,a[i].r=Read()+a[i].l;
      		li[++totl]=a[i].l,li[++totl]=a[i].r;
      	}
      	for(int i=1;i<=m;i++){
      		q[i].l=Read()+1,q[i].r=Read()+q[i].l;
      		li[++totl]=q[i].l,li[++totl]=q[i].r;
      		q[i].id=i;
      	}
              //離散化
      	sort(li+1,li+totl+1);
      	int cnt=unique(li+1,li+totl+1)-(li+1);
      	for(int i=1;i<=n;i++) {
      		a[i].l=lower_bound(li+1,li+cnt+1,a[i].l)-li;
      		a[i].r=lower_bound(li+1,li+cnt+1,a[i].r)-li;
      		rr=max(rr,a[i].r);
      	}
      	for(int i=1;i<=m;i++){
      		q[i].l=lower_bound(li+1,li+cnt+1,q[i].l)-li;
      		q[i].r=lower_bound(li+1,li+cnt+1,q[i].r)-li;
      		rr=max(rr,q[i].r);
      	}
      	sort(a+1,a+n+1,cmp1);
      	sort(q+1,q+m+1,cmp2);
      	int j=1;
      	for(int i=1;i<=m;i++){
      		while(a[j].r>q[i].l) {
      			change(a[j].l,1);
      			j++;
      		}
      		ans[q[i].id]=query(q[i].r-1);
      	}
      	for(int i=1;i<=m;i++) printf("%lld\n",ans[i]);
      	return 0; 
      }
      

      做法2:二分

      考慮什么時候原區間對查詢區間有貢獻。

      設原區間為 \([x,y]\),查詢區間為 \([l,r]\)

      \(y < l\) 或者 \(x > r\) 的時候原區間不在查詢區間的覆蓋范圍內,此時無貢獻。如下圖。

      所以只需要統計查詢區間右端點前原區間左端點的個數,減去查詢區間左端點前原區間右端點的個數。

      代碼

      #include<cstdio>
      #include<iostream> 
      #include<cstring>
      #include<algorithm>
      #include<queue>
      using namespace std;
      #define int long long 
      inline int Read(){
      	int x=0,f=1;
      	char c=getchar();
      	while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
      	while(isdigit(c)){x=x*10+c-48;c=getchar();}
      	return x*f;
      }
      inline void Write(int x){
      	if(x<0){x=-x;putchar('-');}
      	if(x>9) Write(x/10);
      	putchar(x%10+'0');
      }
      const int N=1e5+10;
      int n,m,l[N],r[N];
      signed main(){
      	n=Read();m=Read();
      	for(int i=1;i<=n;i++){
      		l[i]=Read(),r[i]=Read()+l[i]-1;//注意這里是左閉右開
      	}
      	sort(l+1,l+n+1);
      	sort(r+1,r+n+1);//二分需要滿足單調性
      	for(int i=1;i<=m;i++){
      		int x=Read(),y=Read()+x;
      		int ans=lower_bound(l+1,l+n+1,y)-(l+1);
      		ans-=lower_bound(r+1,r+n+1,x)-(r+1);
      		printf("%lld\n",ans);
      	}
      	return 0; 
      }
      
      posted on 2025-11-03 18:19  _Liuliuliuliuliu  閱讀(5)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 亚洲午夜激情久久加勒比| 精品国产一区av天美传媒| 玩弄丰满少妇人妻视频| 在线免费不卡视频| 都江堰市| 欧美性猛交xxxx免费看| 在线观看潮喷失禁大喷水无码| 日韩av中文字幕有码| 99在线精品视频观看免费| 方正县| 中文字幕日韩精品亚洲一区| 久青草视频在线观看免费| 日韩成人午夜精品久久高潮| 人妻有码中文字幕在线| av无码小缝喷白浆在线观看| 国产中文三级全黄| 国产高清一区二区三区视频 | 国产第一页浮力影院入口| 狠狠色噜噜狠狠狠狠2021| 一区二区中文字幕av| 久久久国产乱子伦精品作者| 国产成人8X人网站视频| 免费午夜无码片在线观看影院| 亚洲国产午夜精品福利| 久久国产乱子伦免费精品无码| 白丝乳交内射一二三区| 99久久激情国产精品| 日本欧美大码a在线观看| 国内自拍小视频在线看| 午夜DY888国产精品影院| 久久亚洲精品中文字幕无| 久久人人97超碰精品| 91久久夜色精品国产网站| 久久人人97超碰国产精品| 五月天天天综合精品无码| 国产不卡av一区二区| 欧美老熟妇喷水| 影视先锋av资源噜噜| 一区二区中文字幕久久| 久久久婷婷成人综合激情| 国产精品美女久久久久久麻豆|