Submission #42493

# Submission time Handle Problem Language Result Execution time Memory
42493 2018-02-27T18:16:52 Z yusufake Ancient Books (IOI17_books) C++
Compilation error
0 ms 0 KB
#include<bits/stdc++.h>
 
using namespace std;
 
#define _   int v, int tl, int tr, int l, int r
#define tm  (tl+tr >> 1)
#define sol v+v,tl,tm,l,r
#define sag v+v+1,tm+1,tr,l,r
 
#define mp make_pair
#define pb push_back
#define st first
#define nd second
 
typedef long long ll;
typedef pair < ll , ll > pp;
 
const int mod = 1e9 + 7;
const int N   = 1e3 + 3;
 
int W[N][N],H[N],T[N],n,i,j,l,r,t,x,a,b,mn,mx,ss,u;
int smn[N<<2],smx[N<<2];

void up(_){
   if(tl > r || tr < l) return;
   if(tl >= l && tr <= r) { smn[v] = min(smn[v] , a); smx[v] = max(smx[v] , b); return; }
   up(sol); up(sag); smn[v] = min(smn[v+v] , smn[v+v+1]);
   smx[v] = max(smx[v+v] , smx[v+v+1]);
}
void qry(_){
   if(tl > r || tr < l) return;
   if(tl >= l && tr <= r) { mn = min(mn,smn[v]); mx=max(mx,smx[v]); return; }
   qry(sol); qry(sag);
}


ll minimum_walk(vector < int > p, int s){
    x = 0;
    n = p.size();
    if(n > 1000) return 0;
    memset(smn , 22 , sizeof smn);
	for(i=0;i<n;i++){
		x += abs(p[i] - i);
		if(H[i]) continue;
		r = i;
		for(j=i; !H[j] ; j = p[j]){
			H[j] = 1;
			r = max(r , j);
		}
        for(j=i; !T[j] ; j = p[j]){
		    T[j] = 1;
            a = i;  b = r;
            up(1,0,n,j,j);
        }
    }
    
    for(i=0;i<n && p[i] == i; i++);
    for(j=n-1;j>=0 && p[j] == j; j--);

    priority_queue < pair < int , pp > > Q;
    Q.push(mp(0,mp(s,s))); ss = n;
    for(;Q.size();){
        l = Q.top().nd.st;
        r = Q.top().nd.nd;
        u = Q.top().st;
        Q.pop();
        if(W[l][r]) continue;
      //  cout << l << " " << r << " " << -u << " aa\n";
        if(l <= i && r >= j) ss = min(ss , -u);
        W[l][r] = 1;
        mn = n; mx = 0;
        qry(1,0,n,l,r);
        Q.push(mp(u,mp(mn,mx)));
        if(l) Q.push(mp(u-1,mp(l-1,r)));
        if(r < n-1) Q.push(mp(u-1,mp(l,r+1)));
    }
    
    return x + 2 * ss;
}	

int main(){
    cout << minimum_walk({1,0,2,3} , 2);
}

Compilation message

books.cpp: In function 'void up(int, int, int, int, int)':
books.cpp:6:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
 #define tm  (tl+tr >> 1)
                ^
books.cpp:7:20: note: in expansion of macro 'tm'
 #define sol v+v,tl,tm,l,r
                    ^
books.cpp:27:7: note: in expansion of macro 'sol'
    up(sol); up(sag); smn[v] = min(smn[v+v] , smn[v+v+1]);
       ^
books.cpp:6:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
 #define tm  (tl+tr >> 1)
                ^
books.cpp:8:19: note: in expansion of macro 'tm'
 #define sag v+v+1,tm+1,tr,l,r
                   ^
books.cpp:27:16: note: in expansion of macro 'sag'
    up(sol); up(sag); smn[v] = min(smn[v+v] , smn[v+v+1]);
                ^
books.cpp: In function 'void qry(int, int, int, int, int)':
books.cpp:6:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
 #define tm  (tl+tr >> 1)
                ^
books.cpp:7:20: note: in expansion of macro 'tm'
 #define sol v+v,tl,tm,l,r
                    ^
books.cpp:33:8: note: in expansion of macro 'sol'
    qry(sol); qry(sag);
        ^
books.cpp:6:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
 #define tm  (tl+tr >> 1)
                ^
books.cpp:8:19: note: in expansion of macro 'tm'
 #define sag v+v+1,tm+1,tr,l,r
                   ^
books.cpp:33:18: note: in expansion of macro 'sag'
    qry(sol); qry(sag);
                  ^
books.cpp: In function 'int main()':
books.cpp:82:26: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
     cout << minimum_walk({1,0,2,3} , 2);
                          ^
books.cpp:82:39: error: could not convert '{1, 0, 2, 3}' from '<brace-enclosed initializer list>' to 'std::vector<int>'
     cout << minimum_walk({1,0,2,3} , 2);
                                       ^