线段树——思维(Codeforces 339D Xenia and Bit Operations/Billboard HDU - 2795)
生活随笔
收集整理的這篇文章主要介紹了
线段树——思维(Codeforces 339D Xenia and Bit Operations/Billboard HDU - 2795)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Codeforces 339D Xenia and Bit Operations vj地址
題意:給出2的n次方個數,每次將現在這個序列中相鄰的兩個數運算后合并為一個數,得到一個新的序列,這個新序列的長度是上一個序列長度-1,當新序列長度為1時停止運算,奇數次操作進行OR運算,偶數次操作進行XOR運算,
現在有m個詢問,每次詢問會改變上一個序列中的一個值,問新序列運算后的值為多少
思路:他合并的路線,剛好是和線段樹的合并線路是一樣的,所有 可以巧妙利用線段樹來 算出 答案,就是sum【1】;
代碼
Billboard HDU - 2795 vj地址
題目 大意: 有一塊長為h,寬為w的廣告牌,可以在上面放廣告,廣告的面積是寬為 a[i],長默認為1,有n個廣告,按順序放,如果上面有位置,優先放在最上面,沒有位置放了 輸出-1。
思路:用于是從上到下的放,可以利用線段樹,二分的從左到右的搜索,左邊能夠滿足 ,優先左邊。利用線段樹來維護 寬度。
代碼
#include <cstdio> #include <cstring> #include <string> #include <cmath> #include <iostream> #include <algorithm> #include <queue> #include <cstdlib> #include <stack> #include <vector> #include <set> #include <map> #define INF 0x3f3f3f3f3f3f3f3f #define FILL(a,b) (memset(a,b,sizeof(a))) #define re register #define lowbit(a) ((a)&-(a)) #define ios std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0); using namespace std; typedef long long ll; typedef unsigned long long ull; int dx[4]= {-1,1,0,0},dy[4]= {0,0,1,-1}; const ll mod=10001; const ll N =1e6+10; struct p {int l,r;int Max; }s[N]; int n,h,w; void build(int l,int r,int u) {s[u].l=l;s[u].r=r;s[u].Max=w;if(l==r) return;int mid=(l+r)>>1;build(l,mid,u<<1);build(mid+1,r,u<<1|1); } void q(int l,int r,int u,int w1) {if(l==r){s[u].Max-=w1;printf("%d\n",l);return;}int mid=(l+r)>>1;if(s[u<<1].Max>=w1){q(l,mid,u<<1,w1);}else{q(mid+1,r,u<<1|1,w1);}s[u].Max=max(s[u<<1].Max,s[u<<1|1].Max); } int main() {while(~scanf("%d%d%d",&h,&w,&n)){if(h>n) h=n;build(1,h,1);for(int i=0;i<n;i++){int w1;scanf("%d",&w1);if(w1>s[1].Max) printf("-1\n");else{q(1,h,1,w1);}}}return 0; }總結
以上是生活随笔為你收集整理的线段树——思维(Codeforces 339D Xenia and Bit Operations/Billboard HDU - 2795)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可大幅提高内存的运行效率可大幅提高内存的
- 下一篇: 荣耀公布双11成绩 Magic Vs2摘