Submission #167346

# Submission time Handle Problem Language Result Execution time Memory
167346 2019-12-07T13:00:34 Z sans Turnir (COCI17_turnir) C++14
100 / 100
1789 ms 38408 KB
#include <cstdio>
#include <numeric>
#include <cmath>
#include <algorithm>
#include <vector>
#include <map>

using namespace std;

#define sp ' '
#define st first
#define nd second
#define pb push_back
#define mp make_pair
#define forn(YY, yy) for(long long int yy = 0; yy < YY; ++yy)
#define prn(XX) cout << XX << endl
#define prs(XX) cout << XX << " "

typedef long long int ll;
typedef unsigned long long int ull;
typedef vector<ll> vll;
typedef vector<vector<ll>> vvll;
typedef pair<ll, ll> pll;
typedef vector<pll> vpll;

const int MOD = 1e9 + 7;
const int INF = 2e9 + 13;
const int mINF = -2e9 - 13;
const double PI = 3.14159265358979;
const double EPS = 1e-9;

int main(int argc, char **argv){
    int n, N; vector<int> p, u, ps;
    scanf("%d", &n); N = 1 << n; p.resize(N); u.resize(n);
    for(auto &x: p) scanf("%d", &x); ps = p; sort(ps.begin(), ps.end());
    
    int NN = N; u[0] = 0;
    for(int i = 1; i < n; ++i){
        NN >>= 1;
        u[i] = u[i-1] + NN; 
    }

    map<int, int> ans;
    for(int i = 0; i < N; ++i){
        int x = ps.end() - upper_bound(ps.begin(), ps.end(), ps[i]);
        int l = (lower_bound(u.begin(), u.end(), x) - u.begin());
        ans[ps[i]] = l;
    }
    for(int i = 0; i < N; ++i) printf("%d ", ans[p[i]]);
    printf("\n");

    return 0;
}

//cikisir

Compilation message

turnir.cpp: In function 'int main(int, char**)':
turnir.cpp:35:5: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
     for(auto &x: p) scanf("%d", &x); ps = p; sort(ps.begin(), ps.end());
     ^~~
turnir.cpp:35:38: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
     for(auto &x: p) scanf("%d", &x); ps = p; sort(ps.begin(), ps.end());
                                      ^~
turnir.cpp:34:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &n); N = 1 << n; p.resize(N); u.resize(n);
     ~~~~~^~~~~~~~~~
turnir.cpp:35:26: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     for(auto &x: p) scanf("%d", &x); ps = p; sort(ps.begin(), ps.end());
                     ~~~~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 5 ms 504 KB Output is correct
5 Correct 23 ms 1284 KB Output is correct
6 Correct 65 ms 3320 KB Output is correct
7 Correct 126 ms 5112 KB Output is correct
8 Correct 156 ms 4572 KB Output is correct
9 Correct 845 ms 24312 KB Output is correct
10 Correct 1789 ms 38408 KB Output is correct