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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

P1083 借教室

發布時間:2024/4/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P1083 借教室 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題面:https://www.luogu.org/problem/P1083

一題簡單的線段樹(但在這題看來似乎是一種玄學算法) 開一個線段樹維護區間最小值和支持區間修改即可 只要整個區間中有<0的就不行,即教室不夠了.輸出當前的訂單號就行.Code: #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<cmath> #include <iostream> #define MAXN 10000010 #define inf 0x3f3f3f3f using namespace std; struct node{ int l,r;int add;int mn; }tree[MAXN<<2]; void pushup(int index){ tree[index].mn = min(tree[index<<1].mn,tree[index<<1|1].mn); } void pushdown(int index){ if(tree[index].add){ tree[index<<1].mn += tree[index].add; tree[index<<1|1].mn += tree[index].add; tree[index<<1].add += tree[index].add; tree[index<<1|1].add += tree[index].add; tree[index].add = 0; } } void build(int l,int r,int index){ tree[index].l = l; tree[index].r = r; tree[index].add = 0;if(l == r){ scanf("%d",&tree[index].mn);return ; } int mid = (l+r)>>1; build(l,mid,index<<1); build(mid+1,r,index<<1|1); pushup(index); } void updata(int l,int r,int index,int val){ if(l <= tree[index].l && r >= tree[index].r){ tree[index].mn += val; tree[index].add += val;return ; } pushdown(index); int mid = (tree[index].l+tree[index].r)>>1; if(l <= mid){ updata(l,r,index<<1,val); } if(r > mid){ updata(l,r,index<<1|1,val); } pushup(index); } int main() { int n,m,x,y,z; scanf("%d%d",&n,&m);build(1,n,1);for(int i=1;i<=m;i++){scanf("%d%d%d",&z,&x,&y);updata(x,y,1,-z);if(tree[1].mn<0){cout<<"-1"<<endl<<i<<endl;return 0;}}cout<<"0"<<endl;return 0; }

轉載于:https://www.cnblogs.com/ukcxrtjr/p/11382433.html

總結

以上是生活随笔為你收集整理的P1083 借教室的全部內容,希望文章能夠幫你解決所遇到的問題。

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