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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

NYOJ 600 花儿朵朵

發(fā)布時(shí)間:2025/3/16 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NYOJ 600 花儿朵朵 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

花兒朵朵

時(shí)間限制:1000?ms ?|? 內(nèi)存限制:65535?KB 難度:5 描述
春天到了,花兒朵朵盛開,hrdv是一座大花園的主人,在他的花園里種著許多種鮮花,每當(dāng)這個(gè)時(shí)候,就會(huì)有一大群游客來他的花園欣賞漂亮的花朵,游客們總是會(huì)詢問,某個(gè)時(shí)間有多少種花兒同時(shí)在盛開著?hrdv雖然知道每種花兒的開花時(shí)間段,但是他不能很快的答出游客的問題,你能編寫一個(gè)程序幫助他嗎? 輸入
第一行有個(gè)整數(shù)t,表示有t組測(cè)試數(shù)據(jù),每組測(cè)試數(shù)據(jù)第一行為兩個(gè)整數(shù)n,m(0<n<100000,0<m<100000);隨后有n行,每一行有兩個(gè)整數(shù)x,y(0<x<y<1000000000),表示這一種花的盛開時(shí)間是從x到y(tǒng);隨后有m行,每行有一個(gè)整數(shù),代表游客詢問的時(shí)間。
輸出
對(duì)于每次游客的詢問,輸出一個(gè)整數(shù)在單獨(dú)的一行,表示這個(gè)時(shí)間盛開的花有多少種。
樣例輸入
2 1 1 5 10 4 2 3 1 4 4 8 1 4 6
樣例輸出
0 1 2 1
樹狀數(shù)組+離散化!
AC碼:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct node {int time,order; }num[300000]; int a[300000],s,sum[200000]; int LowBit(int i) {return i&(-i); } void Add(int i,int w) {while(i<=s){sum[i]+=w;i+=LowBit(i);} } int Get(int i) {int result=0;while(i>0){result+=sum[i];i-=LowBit(i);}return result; } int cmp(node a,node b) {if(a.time==b.time)return a.order>b.order;elsereturn a.time<b.time; } int main() {int T,m,n,i;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);s=(n<<1)+m;for(i=1;i<=s;i++){scanf("%d",&num[i].time);num[i].order=i;}// 調(diào)用庫函數(shù)對(duì)time排序sort(num+1,num+s+1,cmp);int count=0;for(i=1;i<=s;i++){if(num[i].time!=num[i-1].time) // 離散化+去重a[num[i].order]=++count;elsea[num[i].order]=count;}i=1;memset(sum,0,sizeof(sum));while(i<=(n<<1)){Add(a[i++],1);Add(a[i++]+1,-1);}for(i=(n<<1)+1;i<=s;i++){printf("%d\n",Get(a[i]));}}return 0; }

總結(jié)

以上是生活随笔為你收集整理的NYOJ 600 花儿朵朵的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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