Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
- #define ll long long
- #define ld double
- #define llu long long unsigned
- #define mx 100001
- vector < int > arr( mx );
- vector < int > tree( mx * 3 );
- void init(int node, int b, int e)
- {
- if (b == e) {
- tree[node] = arr[b];
- return;
- }
- int Left = node * 2;
- int Right = node * 2 + 1;
- int mid = (b + e) / 2;
- init(Left, b, mid);
- init(Right, mid + 1, e);
- tree[node] = min( tree[Left] , tree[Right] );
- }
- int query(int node, int b, int e, int i, int j)
- {
- if (i > e || j < b)
- return INT_MAX;
- if (b >= i && e <= j)
- {
- return tree[node];
- }
- int Left = node * 2;
- int Right = node * 2 + 1;
- int mid = (b + e) / 2;
- int p1 = query(Left, b, mid, i, j);
- int p2 = query(Right, mid + 1, e, i, j);
- return min( p1 , p2 );
- }
- int main()
- {
- fast;
- int t;
- cin>>t;
- for( int c = 1 ; c <= t ; c++ )
- {
- // memset( arr , 0 , sizeof( arr ) );
- // memset( tree , 0 , sizeof( tree ) );
- int n , q;
- cin>>n>>q;
- for( int i = 1 ; i <= n ; i++ )
- cin>>arr[i];
- init( 1 , 1 , n );
- cout<<"Case "<<c<<":"<<endl;
- while( q-- )
- {
- int i , j;
- cin>>i>>j;
- cout<<query( 1 , 1 , n , i , j )<<endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement