제출 #416781

#제출 시각아이디문제언어결과실행 시간메모리
416781FerThugGato12500팀들 (IOI15_teams)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;
const int lmt  = 500005;
const int MOD = 1000000007;

#define f first 
#define S second
#define ll long long
#define ld long double
#define ull unsigned long long
#define forn(i, n) for(int i = 0; i < int(n); i++)
#define for1(i, n) for(int i = 1; i < int(n); i++)
#define forv(i,a,n) for(int i = int(a); i < int(n); i++)
#define rof(i, n) for(int i = int(n); i >= 0; i--)
#define rofv(i,a,n) for(int i = int(n); i >= int(a); i--)
#define pb push_back
#define ins insert
#define pai pair<int, int>
#define pal pair<long long, long long>
#define vi vector<int>
#define vl vector<long long>
#define vld vector<long double>
struct wer{
    int A, B;
};
bool operator < (const wer &a, const wer &b){
    return a.A < b.A;
}
int n;
wer p[lmt];
vi st[lmt*4];
int lessa[lmt*4];
struct ST{
    void build(){
        build(0,n-1,0);
        return;
    }
    void build(int ini, int fin, int ind){
        if(ini==fin){
            st[ind].pb(p[ini].B);
            return;
        }
        int mit = (ini+fin)/2, ls = (ind*2)+1, rs = (ind*2)+2;
        build(ini, mit, ls);
        build(mit+1, fin, rs);
        int a = 0, b = 0;
        while(a<st[ls].size() || b<st[rs].size()){
            if(b==st[rs].size() ||  st[ls][a]>=st[rs][b]){
                st[ind].pb(st[ls][a]);
                a++;
            }else{
                st[ind].pb(st[rs][b]);
                b++;
            }
        }
        return;
    }
    int x, v, l;
    bool query(int stf, int stf2){
        if(stf2==-1){
            lessa[0]=0;
            return false;
        }
        x = v = stf; l = stf2;
        query(0, n-1, 0);
        if(v>0){
            lessa[0] = 0;
            return false;
        }
        return true;
    }
    int find(int ind, int X){
        int ini = lessa[ind], fin = st[ind].size()-1;
        if(st[ind][ini]<x){
            return lessa[ind]-1;
        }
        while(ini+1<fin){
            int mit = (ini+fin)/2;
            if(st[ind][mit]>=X){
                ini = mit;
            }else{
                fin = mit-1;
            }
        }
        if(st[ind][fin]>=X){
            return fin;
        }
        return ini;
    }
    void upd(int ind){
        int ls = (ind*2)+1, rs = (ind*2)+2;
        if(lessa[ind]==0) {
            lessa[ls] = lessa[rs] = 0;
            return;
        }
        int V = lessa[ind];
        int t = st[ind][lessa[ind]-1];
        int c = find(rs, t)+1;
        if(c<=V){
            lessa[rs] = c;
            lessa[ls] = V-c;
        }else{
            lessa[rs] = V;
        }
        return;
    }
    void query(int ini, int fin, int ind){
        int mit = (ini+fin)/2, ls = (ind*2)+1, rs = (ind*2)+2;
        if(ini>l||fin<0){
            return;
        }
        if(ini>=0 && fin<=l){
            if(v==0) return;
            int r = (find(ind, x) - lessa[ind])+1;
            if(r<=v){
                v-=r;
                lessa[ind] += r;
            }else{
                lessa[ind] += v;
                v=0;
            }
            return;
        }
        upd(ind); 
        query(mit+1, fin, rs);
        query(ini, mit, ls);
        return;
    }
};
int alierputoxd[lmt];
ST mqun;
void init(int N, vector<int> *A, vector<int> *B){
    n=N;
    forn(i, n) p[i].A = A[i];
    forn(i, n) p[i].B = B[i];
    sort(p, p+n);
    forn(i, n-1){
        if(p[i].A != p[i+1].A){
            alierputoxd[p[i].A] = i;
        }
    }
    alierputoxd[p[n-1].A] = n-1;
    alierputoxd[0] = -1;
    for1(i,n+1){
        if(!alierputoxd[i] && !(i == 1 && p[0].A==1)){
            alierputoxd[i] = alierputoxd[i-1];
        }
    }
    mqun.build();
    return;
}
bool can(int k, vector<int> *Q){
    sort(Q.begin(), Q.end());
    reverse(Q.begin(), Q.end());
    for(int x: Q){
        if(!mqun.query(x, alierputoxd[x])){
            return false;
        }
    }
    return true;
}

컴파일 시 표준 에러 (stderr) 메시지

teams.cpp: In member function 'void ST::build(int, int, int)':
teams.cpp:47:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |         while(a<st[ls].size() || b<st[rs].size()){
      |               ~^~~~~~~~~~~~~~
teams.cpp:47:35: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |         while(a<st[ls].size() || b<st[rs].size()){
      |                                  ~^~~~~~~~~~~~~~
teams.cpp:48:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 |             if(b==st[rs].size() ||  st[ls][a]>=st[rs][b]){
      |                ~^~~~~~~~~~~~~~~
teams.cpp: In member function 'int ST::find(int, int)':
teams.cpp:73:51: warning: conversion from 'std::vector<int>::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
   73 |         int ini = lessa[ind], fin = st[ind].size()-1;
      |                                     ~~~~~~~~~~~~~~^~
teams.cpp: In function 'void init(int, std::vector<int>*, std::vector<int>*)':
teams.cpp:134:28: error: cannot convert 'std::vector<int>' to 'int' in assignment
  134 |     forn(i, n) p[i].A = A[i];
      |                         ~~~^
      |                            |
      |                            std::vector<int>
teams.cpp:135:28: error: cannot convert 'std::vector<int>' to 'int' in assignment
  135 |     forn(i, n) p[i].B = B[i];
      |                         ~~~^
      |                            |
      |                            std::vector<int>
teams.cpp: In function 'bool can(int, std::vector<int>*)':
teams.cpp:153:12: error: request for member 'begin' in 'Q', which is of pointer type 'std::vector<int>*' (maybe you meant to use '->' ?)
  153 |     sort(Q.begin(), Q.end());
      |            ^~~~~
teams.cpp:153:23: error: request for member 'end' in 'Q', which is of pointer type 'std::vector<int>*' (maybe you meant to use '->' ?)
  153 |     sort(Q.begin(), Q.end());
      |                       ^~~
teams.cpp:154:15: error: request for member 'begin' in 'Q', which is of pointer type 'std::vector<int>*' (maybe you meant to use '->' ?)
  154 |     reverse(Q.begin(), Q.end());
      |               ^~~~~
teams.cpp:154:26: error: request for member 'end' in 'Q', which is of pointer type 'std::vector<int>*' (maybe you meant to use '->' ?)
  154 |     reverse(Q.begin(), Q.end());
      |                          ^~~
teams.cpp:155:16: error: no matching function for call to 'begin(std::vector<int>*&)'
  155 |     for(int x: Q){
      |                ^
In file included from /usr/include/c++/10/bits/range_access.h:36,
                 from /usr/include/c++/10/string:54,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from teams.cpp:1:
/usr/include/c++/10/initializer_list:90:5: note: candidate: 'template<class _Tp> constexpr const _Tp* std::begin(std::initializer_list<_Tp>)'
   90 |     begin(initializer_list<_Tp> __ils) noexcept
      |     ^~~~~
/usr/include/c++/10/initializer_list:90:5: note:   template argument deduction/substitution failed:
teams.cpp:155:16: note:   mismatched types 'std::initializer_list<_Tp>' and 'std::vector<int>*'
  155 |     for(int x: Q){
      |                ^
In file included from /usr/include/c++/10/string:54,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from teams.cpp:1:
/usr/include/c++/10/bits/range_access.h:51:5: note: candidate: 'template<class _Container> constexpr decltype (__cont.begin()) std::begin(_Container&)'
   51 |     begin(_Container& __cont) -> decltype(__cont.begin())
      |     ^~~~~
/usr/include/c++/10/bits/range_access.h:51:5: note:   template argument deduction/substitution failed:
/usr/include/c++/10/bits/range_access.h: In substitution of 'template<class _Container> constexpr decltype (__cont.begin()) std::begin(_Container&) [with _Container = std::vector<int>*]':
teams.cpp:155:16:   required from here
/usr/include/c++/10/bits/range_access.h:51:50: error: request for member 'begin' in '__cont', which is of pointer type 'std::vector<int>*' (maybe you meant to use '->' ?)
   51 |     begin(_Container& __cont) -> decltype(__cont.begin())
      |                                           ~~~~~~~^~~~~
/usr/include/c++/10/bits/range_access.h:61:5: note: candidate: 'template<class _Container> constexpr decltype (__cont.begin()) std::begin(const _Container&)'
   61 |     begin(const _Container& __cont) -> decltype(__cont.begin())
      |     ^~~~~
/usr/include/c++/10/bits/range_access.h:61:5: note:   template argument deduction/substitution failed:
/usr/include/c++/10/bits/range_access.h: In substitution of 'template<class _Container> constexpr decltype (__cont.begin()) std::begin(const _Container&) [with _Container = std::vector<int>*]':
teams.cpp:155:16:   required from here
/usr/include/c++/10/bits/range_access.h:61:56: error: request for member 'begin' in '__cont', which is of pointer type 'std::vector<int>* const' (maybe you meant to use '->' ?)
   61 |     begin(const _Container& __cont) -> decltype(__cont.begin())
      |                                                 ~~~~~~~^~~~~
/usr/include/c++/10/bits/range_access.h:90:5: note: candidate: 'template<class _Tp, long unsigned int _Nm> constexpr _Tp* std::begin(_Tp (&)[_Nm])'
   90 |     begin(_Tp (&__arr)[_Nm])
      |     ^~~~~
/usr/include/c++/10/bits/range_access.h:90:5: note:   template argument deduction/substitution failed:
teams.cpp:155:16: note:   mismatched types '_Tp [_Nm]' and 'std::vector<int>*'
  155 |     for(int x: Q){
      |                ^
In file included from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from teams.cpp:1:
/usr/include/c++/10/valarray:1214:5: note: candidate: 'template<class _Tp> _Tp* std::begin(std::valarray<_Tp>&)'
 1214 |     begin(valarray<_Tp>& __va)
      |     ^~~~~
/usr/include/c++/10/valarray:1214:5: note:   template argument deduction/substitution failed:
teams.cpp:155:16: note:   mismatched types 'std::valarray<_Tp>' and 'std::vector<int>*'
  155 |     for(int x: Q){
      |                ^
In file included from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from teams.cpp:1:
/usr/include/c++/10/valarray:1224:5: note: candidate: 'template<class _Tp> const _Tp* std::begin(const std::valarray<_Tp>&)'
 1224 |     begin(const valarray<_Tp>& __va)
      |     ^~~~~
/usr/include/c++/10/valarray:1224:5: note:   template argument deduction/substitution failed:
teams.cpp:155:16: note:   mismatched types 'const std::valarray<_Tp>' and 'std::vector<int>*'
  155 |     for(int x: Q){
      |                ^
teams.cpp:155:16: error: no matching function for call to 'end(std::vector<int>*&)'
In file included from /usr/include/c++/10/bits/range_access.h:36,
                 from /usr/include/c++/10/string:54,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from teams.cpp:1:
/usr/include/c++/10/initializer_list:101:5: note: candidate: 'template<class _Tp> constexpr const _Tp* std::end(std::initializer_list<_Tp>)'
  101 |     end(initializer_list<_Tp> __ils) noexcept
      |     ^~~
/usr/include/c++/10/initializer_list:101:5: note:   template argument deduction/substitution failed:
teams.cpp:155:16: note:   mismatched types 'std::initializer_list<_Tp>' and 'std::vector<int>*'
  155 |     for(int x: Q){
      |                ^
In file included from /usr/include/c++/10/string:54,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from teams.cpp:1:
/usr/include/c++/10/bits/range_access.h:71:5: note: candidate: 'template<class _Container> constexpr decltype (__cont.end()) std::end(_Container&)'
   71 |     end(_Container& __cont) -> decltype(__cont.end())
      |     ^~~
/usr/include/c++/10/bits/range_access.h:71:5: note:   template argument deduction/substitution failed:
/usr/include/c++/10/bits/range_access.h: In substitution of 'template<class _Container> constexpr decltype (__cont.end()) std::end(_Container&) [with _Container = std::vector<int>*]':
teams.cpp:155:16:   required from here
/usr/include/c++/10/bits/range_access.h:71:48: error: request for member 'end' in '__cont', which is of pointer type 'std::vector<int>*' (maybe you meant to use '->' ?)
   71 |     end(_Container& __cont) -> decltype(__cont.end())
      |                                         ~~~~~~~^~~
/usr/include/c++/10/bits/range_access.h:81:5: note: candidate: 'template<class _Container> constexpr decltype (__cont.end()) std::end(const _Container&)'
   81 |     end(const _Container& __cont) -> decltype(__cont.end())
      |     ^~~
/usr/include/c++/10/bits/range_access.h:81:5: note:   template argument deduction/substitution failed:
/usr/include/c++/10/bits/range_access.h: In substitution of 'template<class _Container> constexpr decltype (__cont.end()) std::end(const _Container&) [with _Container = std::vector<int>*]':
teams.cpp:155:16:   required from here
/usr/include/c++/10/bits/range_access.h:81:54: error: request for member 'end' in '__cont', which is of pointer type 'std::vector<int>* const' (maybe you meant to use '->' ?)
   81 |     end(const _Container& __cont) -> decltype(__cont.end())
      |                                               ~~~~~~~^~~
/usr/include/c++/10/bits/range_access.h:100:5: note: candidate: 'template<class _Tp, long unsigned int _Nm> constexpr _Tp* std::end(_Tp (&)[_Nm])'
  100 |     end(_Tp (&__arr)[_Nm])
      |     ^~~
/usr/include/c++/10/bits/range_access.h:100:5: note:   template argument deduction/substitution failed:
teams.cpp:155:16: note:   mismatched types '_Tp [_Nm]' and 'std::vector<int>*'
  155 |     for(int x: Q){
      |                ^
In file included from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from teams.cpp:1:
/usr/include/c++/10/valarray:1234:5: note: candidate: 'template<class _Tp> _Tp* std::end(std::valarray<_Tp>&)'
 1234 |     end(valarray<_Tp>& __va)
      |     ^~~
/usr/include/c++/10/valarray:1234:5: note:   template argument deduction/substitution failed:
teams.cpp:155:16: note:   mismatched types 'std::valarray<_Tp>' and 'std::vector<int>*'
  155 |     for(int x: Q){
      |                ^
In file included from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from teams.cpp:1:
/usr/include/c++/10/valarray:1244:5: note: candidate: 'template<class _Tp> const _Tp* std::end(const std::valarray<_Tp>&)'
 1244 |     end(const valarray<_Tp>& __va)
      |     ^~~
/usr/include/c++/10/valarray:1244:5: note:   template argument deduction/substitution failed:
teams.cpp:155:16: note:   mismatched types 'const std::valarray<_Tp>' and 'std::vector<int>*'
  155 |     for(int x: Q){
      |                ^
teams.cpp:152:14: warning: unused parameter 'k' [-Wunused-parameter]
  152 | bool can(int k, vector<int> *Q){
      |          ~~~~^