日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

NYOJ 600 花儿朵朵

發布時間:2025/3/16 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NYOJ 600 花儿朵朵 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

花兒朵朵

時間限制:1000?ms ?|? 內存限制:65535?KB 難度:5 描述
春天到了,花兒朵朵盛開,hrdv是一座大花園的主人,在他的花園里種著許多種鮮花,每當這個時候,就會有一大群游客來他的花園欣賞漂亮的花朵,游客們總是會詢問,某個時間有多少種花兒同時在盛開著?hrdv雖然知道每種花兒的開花時間段,但是他不能很快的答出游客的問題,你能編寫一個程序幫助他嗎? 輸入
第一行有個整數t,表示有t組測試數據,每組測試數據第一行為兩個整數n,m(0<n<100000,0<m<100000);隨后有n行,每一行有兩個整數x,y(0<x<y<1000000000),表示這一種花的盛開時間是從x到y;隨后有m行,每行有一個整數,代表游客詢問的時間。
輸出
對于每次游客的詢問,輸出一個整數在單獨的一行,表示這個時間盛開的花有多少種。
樣例輸入
2 1 1 5 10 4 2 3 1 4 4 8 1 4 6
樣例輸出
0 1 2 1
樹狀數組+離散化!
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;}// 調用庫函數對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; }

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。