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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU - 6183 Color it 2017广西邀请赛(线段树)

發(fā)布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU - 6183 Color it 2017广西邀请赛(线段树) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目鏈接

題意:

有四種操作

0操作 清空所有點

1操作 在(x,y)處插入一個帶顏色的點

2 操作統(tǒng)計(1~x)(y1~y2)這個范圍的不同的顏色數(shù)

3 結束

思路:

顏色數(shù)只有51個

我們可以建51顆線段樹 因為每次查詢都是1~x范圍的 所以我們對于每個顏色的線段樹

維護y軸的區(qū)間 節(jié)點的值維護區(qū)間最小的x?

對于每次查詢 我們就只需要查詢 每種顏色是否有<=x的點即可

關于剪枝:

?TLE

7784MS

5584MS

#include<bits/stdc++.h> using namespace std; #define ll long long #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define inf 0x3f3f3f3f const int maxn = 1000000+5; int cnt,x,fg; int ls[maxn*4],rs[maxn*4],Min[maxn*4],root[60]; inline void init(){memset(root,0,sizeof(root));ls[0]=0;rs[0]=0;Min[0]=inf;cnt=0; } inline void push_up(int rt){Min[rt]=min(Min[ls[rt]],Min[rs[rt]]); } inline void update(int &rt,int l,int r,int L,int val){if(!rt){rt=++cnt;ls[rt]=0;rs[rt]=0;Min[rt]=val;}if(l==r){Min[rt]=min(Min[rt],val);return ;}int m=(l+r)>>1;if(L<=m) update(ls[rt],l,m,L,val);else update(rs[rt],m+1,r,L,val);push_up(rt); } inline void query(int rt,int l,int r,int L,int R){if(fg||!rt) return ;if(L<=l&&r<=R) {if(Min[rt]<=x) fg=1;return ;}int m=(l+r)>>1;if(L<=m) query(ls[rt],l,m,L,R);if(R>m) query(rs[rt],m+1,r,L,R); } int main(){int op,y,c,l,r;int n=maxn;while(~scanf("%d",&op)){if(op==3) break;if(op==0){init();}else if(op==1){scanf("%d %d %d",&x,&y,&c);update(root[c],1,n,y,x);}else {scanf("%d %d %d",&x,&l,&r);int ans=0;for(int i=0;i<=50;i++){fg=0;query(root[i],1,n,l,r);ans+=fg;}printf("%d\n",ans);}}return 0; } View Code

?

?

距離省賽越來越近 又要被暴打了(大霧)?

?

轉載于:https://www.cnblogs.com/MengX/p/11291321.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的HDU - 6183 Color it 2017广西邀请赛(线段树)的全部內容,希望文章能夠幫你解決所遇到的問題。

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