Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<vector>
- using namespace std;
- const int inf=2100000000;
- struct node
- {
- int maxi;
- int mini;
- };
- node segtree[8000008];
- int v[2000002];
- void funkcija(int x,int y)
- {
- segtree[y].maxi=min(segtree[y].maxi,segtree[x].mini);
- segtree[y].maxi=max(segtree[y].maxi,segtree[x].maxi);
- segtree[y].mini=min(segtree[y].mini,segtree[x].mini);
- segtree[y].mini=max(segtree[y].mini,segtree[x].maxi);
- }
- void update(int l,int r,int p,int t,int i,int j,int val)
- {
- if(l>j||r<i)
- {
- return;
- }
- if(l>=i&&r<=j)
- {
- if(t==1)
- {
- segtree[p].mini=max(segtree[p].mini,val);
- segtree[p].maxi=max(segtree[p].maxi,val);
- }
- else
- {
- segtree[p].mini=min(segtree[p].mini,val);
- segtree[p].maxi=min(segtree[p].maxi,val);
- }
- return;
- }
- funkcija(p,2*p);
- funkcija(p,2*p+1);
- segtree[p].mini=inf;
- segtree[p].maxi=0;
- update(l,(l+r)/2,2*p,t,i,j,val);
- update((l+r)/2+1,r,2*p+1,t,i,j,val);
- }
- void zavrsi(int l,int r,int p)
- {
- if(l==r)
- {
- v[l]=min(segtree[p].maxi,segtree[p].mini);
- return;
- }
- funkcija(p,2*p);
- funkcija(p,2*p+1);
- zavrsi(l,(l+r)/2,2*p);
- zavrsi((l+r)/2+1,r,2*p+1);
- }
- int main()
- {
- ios_base::sync_with_stdio(false);
- int n,k;
- scanf("%d%d",&n,&k);
- for(int i=0;i<k;i++)
- {
- int a,b,c,d;
- scanf("%d%d%d%d",&a,&b,&c,&d);
- update(0,n-1,1,a,b,c,d);
- }
- zavrsi(0,n-1,1);
- for(int i=0;i<n;i++)
- {
- printf("%d\n",v[i]);
- }
- return 0;
- }
- /*
- 10 6
- 1 1 8 4
- 2 4 9 1
- 2 3 6 5
- 1 0 5 3
- 1 2 2 5
- 2 6 7 0
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement