답안 #345750

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
345750 2021-01-08T02:32:19 Z rrrr10000 벽 (IOI14_wall) C++14
100 / 100
1886 ms 203628 KB
#include <bits/stdc++.h>
using namespace std;
#define rep(i, n)  for(long long i=0;i<(long long)(n);i++)
#define REP(i,k,n) for(long long i=k;i<(long long)(n);i++)
#define all(a) a.begin(),a.end()
#define rsort(a) {sort(all(a));reverse(all(a));}
#define pb emplace_back
#define eb emplace_back
#define lb(v,k) (lower_bound(all(v),(k))-v.begin())
#define ub(v,k) (upper_bound(all(v),(k))-v.begin())
#define fi first
#define se second
#define pi M_PI
#define PQ(T) priority_queue<T>
#define SPQ(T) priority_queue<T,vector<T>,greater<T>>
#define dame(a) {out(a);return 0;}
#define decimal cout<<fixed<<setprecision(15);
#define dupli(a) {sort(all(a));a.erase(unique(all(a)),a.end());}
typedef long long ll;
typedef pair<ll,ll> P;
typedef tuple<ll,ll,ll> PP;
typedef tuple<ll,ll,ll,ll> PPP;
typedef multiset<ll> S;
using vi=vector<ll>;
using vvi=vector<vi>;
using vvvi=vector<vvi>;
using vvvvi=vector<vvvi>;
using vp=vector<P>;
using vvp=vector<vp>;
using vb=vector<bool>;
using vvb=vector<vb>;
using vpp=vector<PP>;
const ll inf=1001001001001001001;
const ll INF=1001001001;
const ll mod=1000000007;
const double eps=1e-10;
template<class T> bool chmin(T&a,T b){if(a>b){a=b;return true;}return false;}
template<class T> bool chmax(T&a,T b){if(a<b){a=b;return true;}return false;}
template<class T> void out(T a){cout<<a<<'\n';}
template<class T> void outp(T a){cout<<'('<<a.fi<<','<<a.se<<')'<<'\n';}
template<class T> void outvp(T v){rep(i,v.size())cout<<'('<<v[i].fi<<','<<v[i].se<<')';cout<<'\n';}
template<class T> void outvvp(T v){rep(i,v.size())outvp(v[i]);}
template<class T> void outv(T v){rep(i,v.size()){if(i)cout<<' ';cout<<v[i];}cout<<'\n';}
template<class T> void outvv(T v){rep(i,v.size())outv(v[i]);}
template<class T> bool isin(T x,T l,T r){return (l)<=(x)&&(x)<=(r);}
template<class T> void yesno(T b){if(b)out("yes");else out("no");}
template<class T> void YesNo(T b){if(b)out("Yes");else out("No");}
template<class T> void YESNO(T b){if(b)out("YES");else out("NO");}
template<class T> void noyes(T b){if(b)out("no");else out("yes");}
template<class T> void NoYes(T b){if(b)out("No");else out("Yes");}
template<class T> void NOYES(T b){if(b)out("NO");else out("YES");}
void outs(ll a,ll b){if(a>=inf-100)out(b);else out(a);}
ll gcd(ll a,ll b){if(b==0)return a;return gcd(b,a%b);}
ll modpow(ll a,ll b){ll res=1;a%=mod;while(b){if(b&1)res=res*a%mod;a=a*a%mod;b>>=1;}return res;}
class segtree{
    ll N=1;
    vvp seg;
public:
    segtree(ll n){
        while(N<n)N*=2;
        seg=vvp(N*2-1);
    }
    void add(ll k,P p){
        if(p.se==2)seg[k]=vp(1,p);
        else if(seg[k].size()==0)seg[k].pb(p);
        else if(seg[k].size()==1){
            if(seg[k][0].se==2){
                if(p.fi*p.se>seg[k][0].fi*p.se)seg[k][0].fi=p.fi;
            }
            else if(seg[k][0].se==p.se){
                if(p.fi*p.se>seg[k][0].fi*p.se)seg[k][0].fi=p.fi;
            }
            else if(p.fi*p.se>seg[k][0].fi*p.se)seg[k][0]=P(p.fi,2);
            else seg[k].pb(p);
        }
        else{
            if(p.se!=seg[k][1].se)swap(seg[k][0],seg[k][1]);
            if(p.fi*p.se>seg[k][1].fi*p.se){
                seg[k].pop_back();add(k,p);
            }
        }
    }
    void eval(ll k){
        for(P p:seg[k])add(k*2+1,p);
        for(P p:seg[k])add(k*2+2,p);
        seg[k]=vp(0);
    }
    void update(P x,ll a,ll b,ll k=0,ll l=0,ll r=-1){
        if(r==-1)r=N;
        if(a<=l&&r<=b){
            add(k,x);
            return;
        }
        if(r<=a||b<=l)return;
        eval(k);
        update(x,a,b,k*2+1,l,(l+r)/2);
        update(x,a,b,k*2+2,(l+r)/2,r);
    }
    vi g(ll n){
        vi res(n);
        rep(i,N-1)eval(i);
        rep(i,n){
            for(auto x:seg[i+N-1]){
                if(x.se==2)res[i]=x.fi;
                if(x.se==1)chmax(res[i],x.fi);
                if(x.se==-1)chmin(res[i],x.fi);
            }
        }
        return res;
    }
};
void buildWall(int n,int k,int op[],int left[],int right[],int height[],int finalHeight[]){
    segtree seg(n);
    rep(i,k)if(op[i]==2)op[i]=-1;
    rep(i,k)seg.update(P(height[i],op[i]),left[i],right[i]+1);
    vi res=seg.g(n);
    rep(i,n)finalHeight[i]=res[i];
}
/*
int main(){
    ll n,k;cin>>n>>k;
    int op[100],l[100],r[100],h[100],res[100];
    rep(i,k)cin>>op[i]>>l[i]>>r[i]>>h[i];
    buildWall(n,k,op,l,r,h,res);
    rep(i,n)cout<<res[i]<<' ';
}*/
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 2 ms 364 KB Output is correct
3 Correct 3 ms 364 KB Output is correct
4 Correct 14 ms 1772 KB Output is correct
5 Correct 7 ms 1644 KB Output is correct
6 Correct 7 ms 1644 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 364 KB Output is correct
2 Correct 157 ms 8172 KB Output is correct
3 Correct 413 ms 6380 KB Output is correct
4 Correct 1641 ms 20632 KB Output is correct
5 Correct 379 ms 18820 KB Output is correct
6 Correct 369 ms 18668 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 2 ms 364 KB Output is correct
3 Correct 3 ms 492 KB Output is correct
4 Correct 14 ms 1772 KB Output is correct
5 Correct 11 ms 1644 KB Output is correct
6 Correct 7 ms 1644 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
8 Correct 160 ms 13996 KB Output is correct
9 Correct 403 ms 9964 KB Output is correct
10 Correct 1648 ms 30316 KB Output is correct
11 Correct 384 ms 28780 KB Output is correct
12 Correct 365 ms 27244 KB Output is correct
13 Correct 1 ms 364 KB Output is correct
14 Correct 168 ms 13932 KB Output is correct
15 Correct 78 ms 4076 KB Output is correct
16 Correct 1882 ms 30476 KB Output is correct
17 Correct 384 ms 27756 KB Output is correct
18 Correct 395 ms 27756 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 364 KB Output is correct
2 Correct 2 ms 364 KB Output is correct
3 Correct 3 ms 364 KB Output is correct
4 Correct 14 ms 1772 KB Output is correct
5 Correct 7 ms 1644 KB Output is correct
6 Correct 7 ms 1644 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
8 Correct 159 ms 13932 KB Output is correct
9 Correct 407 ms 10224 KB Output is correct
10 Correct 1637 ms 30448 KB Output is correct
11 Correct 383 ms 29036 KB Output is correct
12 Correct 371 ms 27372 KB Output is correct
13 Correct 1 ms 364 KB Output is correct
14 Correct 165 ms 13932 KB Output is correct
15 Correct 76 ms 4076 KB Output is correct
16 Correct 1886 ms 30444 KB Output is correct
17 Correct 386 ms 27756 KB Output is correct
18 Correct 392 ms 27628 KB Output is correct
19 Correct 1146 ms 203468 KB Output is correct
20 Correct 1137 ms 203424 KB Output is correct
21 Correct 1128 ms 203628 KB Output is correct
22 Correct 1125 ms 203420 KB Output is correct
23 Correct 1127 ms 203396 KB Output is correct
24 Correct 1121 ms 203244 KB Output is correct
25 Correct 1125 ms 203364 KB Output is correct
26 Correct 1134 ms 203380 KB Output is correct
27 Correct 1135 ms 203244 KB Output is correct
28 Correct 1121 ms 203308 KB Output is correct
29 Correct 1131 ms 203252 KB Output is correct
30 Correct 1118 ms 203204 KB Output is correct