Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define pb push_back
- #define mp make_pair
- #define ff first
- #define ss second
- #define SQ(x) ((x)*(x))
- #define LCM(x,y) (((x)/gcd((x),(y)))*(y))
- #define PI acos(-1)
- #define SZ(x) x.size() - 1
- #define waa printf("Ripon\n")
- #define mem(a,b) memset(a,b,sizeof(a))
- #define rep(i,a,n) for(int i=(int)(a);i<=(int)(n);i++)
- #define per(i,n,a) for(int i=(int)(n);i>=(int)(a);i--)
- #define SC scanf
- #define PF printf
- #define sc(x) scanf("%d",&x)
- #define scl(x) scanf("%lld",&x)
- #define scc(x,y) scanf("%d %d",&x,&y)
- #define sccl(x,y) scanf("%lld %lld",&x,&y)
- #define sccc(x,y,z) scanf("%d %d %d",&x,&y,&z)
- #define scccl(x,y,z) scanf("%lld %lld %lld",&x,&y,&z)
- //Grid tour
- int dx[] = { 0, 1, 0, -1, -1, 1, 1, -1 };
- int dy[] = { 1, 0, -1, 0, -1, -1, 1, 1 };
- int kx[] = { -2, -2, -1, 1, 2, 2, 1, -1 };
- int ky[] = { -1, 1, 2, 2, 1, -1, -2, -2 };
- //functions
- inline ll gcd(ll a,ll b){a =fabs(a);b=fabs(b);while(b){a=a%b;swap(a,b);}return a;}
- inline ll bigmod(ll a,ll p,ll m){ll res=1% m,x=a%m;while(p){if(p&1)res=(res*x)%m;x=(x*x)%m;p>>= 1;}return res;}
- int overlap(int rs,int re,int qs,int qe){ if(rs>qe or re<qs) return 0; else if(qs<=rs and re<=qe) return 1; else return 2;}
- #define mod 10000007
- #define eps 1e-9
- #define inf INT_MAX
- #define mx 30009
- struct DATA{};
- int tree[mx*3];
- int arr[] = {0 ,2 ,1, 4, 5, 1, 3, 3};
- int lft,rgt,n=7;
- ll res;
- int build(int node,int st,int en){
- if(st==en){
- return tree[node] = arr[st];
- }
- int lchild = node * 2;
- int rchild = lchild + 1;
- int mid = (st+en) / 2;
- return tree[node] = min(build(lchild,st,mid),build(rchild,mid+1,en));
- }
- int query_left(int node,int st,int en,int lf,int rt,int val,int in){
- cout<<"call "<<st<<" "<<en<<endl;
- int op = overlap(st,en,lf,rt);
- if(op==0) return INT_MAX;
- else if(st==en){
- return arr[st];
- }else if(op==1 and tree[node]>=val){
- cout<<"yappi "<<st<<" "<<en<<" node = "<<node<<" tree[node] = "<<tree[node]<<" val = "<<val<<endl;
- return tree[node];
- }
- int lchild = node * 2;
- int rchild = lchild + 1;
- int mid = (st+en) / 2;
- int L=INT_MAX,R=INT_MAX;
- R = query_left(rchild,mid+1,en,lf,rt,val,in);
- if(R>=val and R!=INT_MAX){
- lft = min(lft,mid+1);
- }else if(mid+1<=in){
- return INT_MAX;
- }
- cout<<st<<" "<<en<<" After R lft = "<<lft<<endl;
- L = query_left(lchild,st,mid,lf,rt,val,in);
- if(L>=val and L!=INT_MAX){
- lft = min(lft,st);
- }else return INT_MAX;
- cout<<st<<" "<<en<<" After L lft = "<<lft<<endl;
- return min(R,L);
- }
- void solve(int T){
- rep(i,1,n*3) tree[i] = INT_MAX;
- build(1,1,n);
- cout<<tree[6]<<endl;
- int i = 4;
- lft=rgt=i;
- query_left(1,1,n,1,i,arr[i],i);
- cout<<lft<<" "<<rgt<<endl;
- cout<<endl;
- }
- int main(){
- //freopen("file.txt","r",stdin);
- //freopen("out.txt","w",stdout);
- int T = 1;
- //sc(T);
- for(int i = 1;i<=T;i++) solve(i);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement