Advertisement
iletavcioski

krkrkr

Mar 29th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3. using namespace std;
  4. const int inf=2100000000;
  5. struct node
  6. {
  7.     int maxi;
  8.     int mini;
  9. };
  10. node segtree[8000008];
  11. int v[2000002];
  12. void funkcija(int x,int y)
  13. {
  14.     segtree[y].maxi=min(segtree[y].maxi,segtree[x].mini);
  15.     segtree[y].maxi=max(segtree[y].maxi,segtree[x].maxi);
  16.     segtree[y].mini=min(segtree[y].mini,segtree[x].mini);
  17.     segtree[y].mini=max(segtree[y].mini,segtree[x].maxi);
  18. }
  19. void update(int l,int r,int p,int t,int i,int j,int val)
  20. {
  21.     if(l>j||r<i)
  22.     {
  23.         return;
  24.     }
  25.     if(l>=i&&r<=j)
  26.     {
  27.         if(t==1)
  28.         {
  29.             segtree[p].mini=max(segtree[p].mini,val);
  30.             segtree[p].maxi=max(segtree[p].maxi,val);
  31.         }
  32.         else
  33.         {
  34.             segtree[p].mini=min(segtree[p].mini,val);
  35.             segtree[p].maxi=min(segtree[p].maxi,val);
  36.         }
  37.         return;
  38.     }
  39.     funkcija(p,2*p);
  40.     funkcija(p,2*p+1);
  41.     segtree[p].mini=inf;
  42.     segtree[p].maxi=0;
  43.     update(l,(l+r)/2,2*p,t,i,j,val);
  44.     update((l+r)/2+1,r,2*p+1,t,i,j,val);
  45. }
  46. void zavrsi(int l,int r,int p)
  47. {
  48.     if(l==r)
  49.     {
  50.         v[l]=min(segtree[p].maxi,segtree[p].mini);
  51.         return;
  52.     }
  53.     funkcija(p,2*p);
  54.     funkcija(p,2*p+1);
  55.     zavrsi(l,(l+r)/2,2*p);
  56.     zavrsi((l+r)/2+1,r,2*p+1);
  57. }
  58. int main()
  59. {
  60.     ios_base::sync_with_stdio(false);
  61.     int n,k;
  62.     scanf("%d%d",&n,&k);
  63.     for(int i=0;i<k;i++)
  64.     {
  65.         int a,b,c,d;
  66.         scanf("%d%d%d%d",&a,&b,&c,&d);
  67.         update(0,n-1,1,a,b,c,d);
  68.  
  69.     }
  70.     zavrsi(0,n-1,1);
  71.     for(int i=0;i<n;i++)
  72.     {
  73.         printf("%d\n",v[i]);
  74.     }
  75.     return 0;
  76. }
  77. /*
  78. 10 6
  79. 1 1 8 4
  80. 2 4 9 1
  81. 2 3 6 5
  82. 1 0 5 3
  83. 1 2 2 5
  84. 2 6 7 0
  85. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement