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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HDU多校4 - 6992 Lawn of the Dead(线段树+模拟)

發(fā)布時間:2024/4/11 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU多校4 - 6992 Lawn of the Dead(线段树+模拟) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目鏈接:點擊查看

題目大意:給出一個 n?mn*mn?m 的矩陣,有 kkk 個點被 banbanban 掉了,現(xiàn)在從點 (1,1)(1,1)(1,1) 出發(fā),只能向右或向下移動,問可以到達(dá)的點有多少個

題目分析:

先做一些定義,定義無法到達(dá)的點為“壞點”,可以到達(dá)的點為“好點”

雖然 n?mn*mn?m 很大,不能直接 bfsbfsbfs,但是單獨的 nnnmmm 卻不大,這里我從列入手,考慮相鄰的兩列,假設(shè) preprepre 為上一列的狀態(tài),現(xiàn)在考慮 curcurcur 的情況。對于第 curcurcur 列的每個“壞點”來說,設(shè)其橫坐標(biāo)為 xxx,我們需要找到第 preprepre 列中,行區(qū)間 [x+1,n][x+1,n][x+1,n] 中的首個“好點”的位置記為 ppp,不難看出,curcurcur 列中的行區(qū)間 [x,p?1][x,p-1][x,p?1] 這段都是無法到達(dá)的“壞點”。還有一種情況就是 ppp 不存在,也就是 preprepre 列的行區(qū)間 [x+1,n][x+1,n][x+1,n] 這段都是“壞點”,那么顯然 curcurcur 列中行區(qū)間為 [x,n][x,n][x,n] 的點也是無法到達(dá)的

區(qū)間修改、區(qū)間查找某個數(shù)字首次出現(xiàn)的位置,用線段樹很容易就能實現(xiàn)了,時間復(fù)雜度 O(nlog2n)O(nlog^2n)O(nlog2n)

需要注意的是,每一列的第 000 行也要視為一個壞點

代碼:

// Problem: Lawn of the Dead // Contest: Virtual Judge - HDU // URL: https://vjudge.net/problem/HDU-6992 // Memory Limit: 262 MB // Time Limit: 2000 ms // // Powered by CP Editor (https://cpeditor.org)// #pragma GCC optimize(2) // #pragma GCC optimize("Ofast","inline","-ffast-math") // #pragma GCC target("avx,sse2,sse3,sse4,mmx") #include<iostream> #include<cstdio> #include<string> #include<ctime> #include<cmath> #include<cstring> #include<algorithm> #include<stack> #include<climits> #include<queue> #include<map> #include<set> #include<sstream> #include<cassert> #include<bitset> #include<list> #include<unordered_map> #define lowbit(x) (x&-x) using namespace std; typedef long long LL; typedef unsigned long long ull; template<typename T> inline void read(T &x) {T f=1;x=0;char ch=getchar();while(0==isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(0!=isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();x*=f; } template<typename T> inline void write(T x) {if(x<0){x=~(x-1);putchar('-');}if(x>9)write(x/10);putchar(x%10+'0'); } const int inf=0x3f3f3f3f; const int N=1e6+100; struct Seg {struct Node {int l,r,len,sum,lazy;}tree[N<<2];void pushup(int k) {tree[k].sum=tree[k<<1].sum+tree[k<<1|1].sum;}void pushdown(int k) {if(tree[k].lazy!=-1) {int lz=tree[k].lazy;tree[k].lazy=-1;tree[k<<1].lazy=tree[k<<1|1].lazy=lz;tree[k<<1].sum=tree[k<<1].len*lz;tree[k<<1|1].sum=tree[k<<1|1].len*lz;}}void build(int k,int l,int r) {tree[k]={l,r,r-l+1,0,-1};if(l==r) {return;}int mid=(l+r)>>1;build(k<<1,l,mid);build(k<<1|1,mid+1,r);}void update(int k,int l,int r,int val) {if(tree[k].l>r||tree[k].r<l) {return;}if(tree[k].l>=l&&tree[k].r<=r) {tree[k].lazy=val;tree[k].sum=tree[k].len*val;return;}pushdown(k);update(k<<1,l,r,val);update(k<<1|1,l,r,val);pushup(k);}int query_sum(int k,int l,int r) {if(tree[k].l>r||tree[k].r<l) {return 0;}if(tree[k].l>=l&&tree[k].r<=r) {return tree[k].sum;}pushdown(k);return query_sum(k<<1,l,r)+query_sum(k<<1|1,l,r);}int query(int k,int l,int r) {if(l>r||query_sum(k,l,r)==0) {return -1;}if(tree[k].l==tree[k].r) {return tree[k].l;}pushdown(k);if(query_sum(k<<1,l,r)) {return query(k<<1,l,r);} else {return query(k<<1|1,l,r);}} }t[2]; vector<int>node[N]; int main() { #ifndef ONLINE_JUDGE // freopen("data.in.txt","r",stdin); // freopen("data.out.txt","w",stdout); #endif // ios::sync_with_stdio(false);int w;cin>>w;while(w--) {int n,m,k;read(n),read(m),read(k);for(int i=1;i<=m;i++) {node[i].clear();node[i].push_back(0);}while(k--) {int x,y;scanf("%d%d",&x,&y);node[y].push_back(x);}LL ans=0;t[0].build(1,1,n),t[1].build(1,1,n);sort(node[1].begin(),node[1].end());if(node[1].size()>1) {t[1].update(1,1,node[1][1]-1,1);} else {t[1].update(1,1,n,1);}ans+=t[1].tree[1].sum;for(int i=2;i<=m;i++) {int cur=i&1,pre=cur^1;t[cur].update(1,1,n,1);for(auto it:node[i]) {int p=t[pre].query(1,it+1,n);if(p==-1) {t[cur].update(1,it,n,0);} else {t[cur].update(1,it,p-1,0);}}ans+=t[cur].tree[1].sum;}printf("%lld\n",ans);}return 0; }

總結(jié)

以上是生活随笔為你收集整理的HDU多校4 - 6992 Lawn of the Dead(线段树+模拟)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美九九视频 | 成人做爰69片免费 | 日批黄色片 | 久久成人福利视频 | 在线观看免费高清视频 | 美女网站在线免费观看 | 中文字幕一区二区三区久久久 | 搡国产老太xxx网站 高h喷汁呻吟3p | 精品国产综合区久久久久久 | 国产全肉乱妇杂乱视频 | 久久久久成人网 | 在线观看污污视频 | 91免费污视频 | 性一交一乱一色一视频麻豆 | 欧美日韩亚洲精品一区二区 | 日日操日日摸 | 国产精品国产三级国产传播 | 亚洲国产一区二区三区四区 | 色哟哟官网 | 在线一区二区视频 | 亚洲日本护士毛茸茸 | 久久久精品毛片 | 大肉大捧一进一出好爽视频 | 欧美激情69 | 亚洲精品乱码久久久久久蜜桃91 | 亚洲精品天堂在线观看 | 久久97久久97精品免视看 | 无码人妻精品一区二区蜜桃视频 | 一级免费毛片 | 精品国产一区二区三区久久久蜜月 | 日本激情视频网站 | 国产视频精品久久 | 国产精品suv一区二区 | 美女扒开腿男人爽桶 | 大地资源在线观看免费高清版粤语 | 亚洲精品视频在线观看免费视频 | 久久久高潮 | 超碰夜夜 | 美女校花脱精光 | 先锋影音一区二区 | 亚洲欧美自偷自拍 | 会喷水的亲姐姐 | 免费午夜av | 无码人妻丰满熟妇啪啪网站 | 性色av无码久久一区二区三区 | 伊人久艹 | 日本啊v在线 | 69日本xxxxxxxxx30| 蜜桃视频在线网站 | 成人激情小视频 | 18视频网站在线观看 | 911福利视频 | 中文字幕视频免费观看 | 99爱爱视频 | 黄色网址多少 | 国产午夜精品一区二区 | 国产手机在线观看 | 操日本老太太 | 国产一区精品在线观看 | 亚洲人成电影在线播放 | 99久久精品国产色欲 | 天天夜夜久久 | av成人动漫 | 91精品亚洲一区 | 国内少妇精品 | 久久青青操| 99久久影视| 国产精品久久久久久一区二区 | 日韩国产亚洲欧美 | aaa欧美| 中文字幕自拍偷拍 | 国产成人精品一区二区三区 | 国产精品嫩草av | 日韩av免费在线观看 | 国产老熟女伦老熟妇露脸 | 色99视频| 成人精品影院 | av免费久久 | 一区二区三区欧美 | 国产精品成人69xxx免费视频 | 中国爆后菊女人的视频 | 男女吻胸做爰摸下身 | 影音av资源 | 极品蜜桃臀肥臀-x88av | 青娱乐国产 | 久草视频在线看 | 国产又粗又长又硬免费视频 | 欧美视频在线一区二区三区 | 日日狠狠久久 | 日产欧产va高清 | 国产无限资源 | 河北彩花69xx精品一区 | 色欲av无码一区二区三区 | 九九久久九九久久 | 永久看看免费大片 | 羞羞成人 | 干日本少妇首页 | 亚洲av无码日韩精品影片 | a v视频在线播放 |