UVA12299 线段树水水水,但别乱开空间= =
生活随笔
收集整理的這篇文章主要介紹了
UVA12299 线段树水水水,但别乱开空间= =
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
看lyc的題解。。。。
傳送門
果然神的題解都不放代碼的
但是一直不知道為什么錯了。。。后來也不知道怎么改就過了。。。。
后來慢慢改,也不知道怎么就ac了。。。
看來敲線段樹還是要仔細啊。啊啊啊啊啊啊啊啊啊啊啊啊啊
單點修改,區間查詢,練練非遞歸寫法
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N=433333,INF=99999999; struct tree{int T[N],BTM;void build(int n){BTM=1; while (BTM<n)BTM<<=1; BTM--;//getBTMfor (int i=BTM+1;i<=BTM+n;i++)scanf("%d",&T[i]);scanf("\n");for (int i=BTM+n+1;i<=BTM*2+1;i++)T[i]=INF;for (int i=BTM;i>=1;i--){T[i]=min(T[i<<1],T[i<<1^1]);}}int query(int l,int r){int ans=INF;for (l+=BTM-1,r+=BTM+1;l^r^1;l>>=1,r>>=1){if (~l&1)ans=min(ans,T[l^1]);if ( r&1)ans=min(ans,T[r^1]);}return ans;}void change(int k,int x){for (T[k+=BTM]=x,k>>=1;k;k>>=1){T[k]=min(T[k<<1],T[k<<1^1]);}} }T;int main(){int x,y,n,q;//freopen("fuck.in","r",stdin);scanf("%d%d",&n,&q);T.build(n);char ch,ch2,ask;while (q--){scanf("%c",&ask);for (int i=1;i<=5;i++)scanf("%c",&ch);if (ask=='q'){scanf("%d%c%d%c",&x,&ch,&y,&ch2);printf("%d\n",T.query(x,y));}else {scanf("%d%c",&x,&ch);int tmp=T.T[x+T.BTM];while (~scanf("%d%c",&y,&ch)){T.change(x,T.T[y+T.BTM]);x=y; if (ch==')')break;}T.change(y,tmp);}getchar();}return 0; }有沒有神犇求教區間修改的非遞歸寫法,,,傻傻看不懂
感謝【愛曬妹的靜靜】幫我普及基本法
啊啊啊啊啊
一開始數組開20W,然后RTE,
一怒之下開200W,,,SE
最后改成40W,,,,,A了,,
十分的狗屁不通
轉載于:https://www.cnblogs.com/cww97/p/7534019.html
總結
以上是生活随笔為你收集整理的UVA12299 线段树水水水,但别乱开空间= =的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十天精通CSS3(11)
- 下一篇: SQL-语句实现九九乘法表