日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[BOI2007] Mokia

發(fā)布時(shí)間:2023/12/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [BOI2007] Mokia 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目描述

摩爾瓦多的移動(dòng)電話公司摩基亞(Mokia)設(shè)計(jì)出了一種新的用戶定位系統(tǒng)。和其他的定位系統(tǒng)一樣,它能夠迅速回答任何形如“用戶C的位置在哪?”的問(wèn)題,精確到毫米。但其真正高科技之處在于,它能夠回答形如“給定區(qū)域內(nèi)有多少名用戶?”的問(wèn)題。

在定位系統(tǒng)中,世界被認(rèn)為是一個(gè)W×W的正方形區(qū)域,由1×1的方格組成。每個(gè)方格都有一個(gè)坐標(biāo)(x,y),1<=x,y<=W。坐標(biāo)的編號(hào)從1開(kāi)始。對(duì)于一個(gè)4×4的正方形,就有1<=x<=4,1<=y<=4(如圖):

請(qǐng)幫助Mokia公司編寫(xiě)一個(gè)程序來(lái)計(jì)算在某個(gè)矩形區(qū)域內(nèi)有多少名用戶。

輸入輸出格式

輸入格式:

?

有三種命令,意義如下:

命令 參數(shù) 意義

  • 0 W 初始化一個(gè)全零矩陣。本命令僅開(kāi)始時(shí)出現(xiàn)一次。
  • 1 x y A 向方格(x,y)中添加A個(gè)用戶。A是正整數(shù)。
  • 2 X1 Y1 X2 Y2 查詢X1<=x<=X2,Y1<=y<=Y2所規(guī)定的矩形中的用戶數(shù)量
  • 3 無(wú)參數(shù) 結(jié)束程序。本命令僅結(jié)束時(shí)出現(xiàn)一次。

?

輸出格式:

?

對(duì)所有命令2,輸出一個(gè)一行整數(shù),即當(dāng)前詢問(wèn)矩形內(nèi)的用戶數(shù)量。

?

輸入輸出樣例

輸入樣例#1:?
0 4 1 2 3 3 2 1 1 3 3 1 2 2 2 2 2 2 3 4 3 輸出樣例#1:?
3 5

說(shuō)明

1<=W<=2000000

1<=X1<=X2<=W

1<=Y1<=Y2<=W

1<=x,y<=W

0<A<=10000

命令1不超過(guò)160000個(gè)。

命令2不超過(guò)10000個(gè)。

?

?

? ? CDQ求解三維偏序模板題。

?

#include<bits/stdc++.h> #define ll long long using namespace std; const int maxn=200005; struct node{int x,y,z,num,FL; }a[maxn]; int opt,A,B,C,D,cnt=0,W,qnum; int ans[maxn],f[maxn],T;inline bool cmp3(node x,node y){return x.z==y.z?x.num<y.num:x.z<y.z; }inline bool cmp2(node x,node y){return x.y==y.y?cmp3(x,y):x.y<y.y; }inline bool cmp1(node x,node y){return x.x==y.x?cmp2(x,y):x.x<y.x; }inline void update(int x,int y){for(;x<=T;x+=x&-x) f[x]+=y; }inline int query(int x){int an=0;for(;x;x-=x&-x) an+=f[x];return an; }void cdq(int L,int R){if(L>=R) return;int mid=L+R>>1,i,j;cdq(L,mid),cdq(mid+1,R);sort(a+L,a+mid+1,cmp2);sort(a+mid+1,a+R+1,cmp2);for(i=L,j=mid+1;j<=R;j++){for(;i<=mid&&a[i].y<=a[j].y;i++) if(!a[i].num) update(a[i].z,a[i].FL);if(a[j].num) ans[a[j].num]+=a[j].FL*query(a[j].z);}for(i--;i>=L;i--) if(!a[i].num) update(a[i].z,-a[i].FL); }int main(){scanf("%d%d",&opt,&W);while(scanf("%d",&opt)==1&&opt!=3){T++;if(opt==1){scanf("%d%d%d",&A,&B,&C);a[++cnt]=(node){A,B,T,0,C};}else{qnum++;scanf("%d%d%d%d",&A,&B,&C,&D);a[++cnt]=(node){C,D,T,qnum,1};a[++cnt]=(node){A-1,B-1,T,qnum,1};a[++cnt]=(node){A-1,D,T,qnum,-1};a[++cnt]=(node){C,B-1,T,qnum,-1};}}sort(a+1,a+cnt+1,cmp1);cdq(1,cnt);for(int i=1;i<=qnum;i++) printf("%d\n",ans[i]);return 0; }

  

轉(zhuǎn)載于:https://www.cnblogs.com/JYYHH/p/8809860.html

總結(jié)

以上是生活随笔為你收集整理的[BOI2007] Mokia的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。