Advertisement
Morass

Segment-Tree

Nov 4th, 2016
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.98 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define PB push_back
  4. #define ZERO (1e-10)
  5. #define INF (1<<29)
  6. #define CL(A,I) (memset(A,I,sizeof(A)))
  7. #define DEB printf("DEB!\n");
  8. #define D(X) cout<<"  "<<#X": "<<X<<endl;
  9. #define EQ(A,B) (A+ZERO>B&&A-ZERO<B)
  10. typedef long long ll;
  11. typedef long double ld;
  12. typedef pair<ll,ll> pll;
  13. typedef vector<int> vi;
  14. typedef pair<int,int> ii;
  15. typedef vector<ii> vii;
  16. #define IN(n) int n;scanf("%d",&n);
  17. #define FOR(i, m, n) for (int i(m); i < n; i++)
  18. #define REP(i, n) FOR(i, 0, n)
  19. #define F(n) REP(i, n)
  20. #define FF(n) REP(j, n)
  21. #define FT(m, n) FOR(k, m, n)
  22. #define aa first
  23. #define bb second
  24. void ga(int N,int *A){F(N)scanf("%d",A+i);}
  25. ll H[1<<20],W;
  26. struct sX{
  27.     ll *p;
  28.     int N;
  29.     void ini(int n){
  30.         N=1<<(int(log2(n)-ZERO)+1),p=H+W,W+=N*2;//just init - nesetuje se nic.. to proste pak dej pomoci "st", jen to bude log(N) krat pomalejsi
  31.         F(N<<1)p[i]=INF;//init val
  32.     }
  33.     //Nasetuje hodnotu na segmentu
  34.     void st(int b,int e,ll v){st(b,e,v,1,0,N-1);}//b==Zacatek co hledas | e==Konec segmentu | v=hodnota
  35.     //B,E == zacatek/konec segmentu v aktualni rekurzy
  36.     void st(int b,int e,ll v,int u,int B,int E){
  37.         if(B>e||E<b)return;//Pokud se neprekryva aktualni/chteny segment
  38.         //Zajima nas v podstate case B==E!
  39.         if(b<=B&&e>=E){p[u]=v;return;}//pokud se pokud je aktualni segment podmnozinou chteneho segmentu
  40.  
  41.         st(b,e,v,u<<1,B,(B+E)>>1),st(b,e,v,u<<1|1,(B+E)/2+1,E);//call both branches
  42.         p[u]=min(p[u<<1],p[u<<1|1]);//update value on minimum
  43.     }
  44.     ll gt(int b,int e){return gt(b,e,1,0,N-1);}//get minimum
  45.     ll gt(int b,int e,int u,int B,int E){
  46.         if(B>e||E<b)return INF;//fail value → pokud se segmenty neprekryvaji
  47.         if(b<=B&&e>=E)return p[u];//segmenty se prekryvaji uplne
  48.         return min(gt(b,e,u<<1,B,(B+E)>>1),gt(b,e,u<<1|1,(B+E)/2+1,E));
  49.     }
  50.    
  51. }T;
  52. #define CLR W=0 //neni potreba - jen pro vice test-cases
  53. int main(void){
  54.  
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement