Submission #74140

# Submission time Handle Problem Language Result Execution time Memory
74140 2018-08-30T09:32:25 Z jiaqing23 Zalmoxis (BOI18_zalmoxis) C++14
15 / 100
1000 ms 122076 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define fbo find_by_order
#define ook order_of_key

typedef long long ll;
typedef pair<int,int> pi;
typedef vector<ll> vi;
typedef long double ld;
typedef tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update> pbds;
typedef set<ll>::iterator sit;
typedef map<ll,ll>::iterator mit;
typedef pair<int,pair<int,int> > tri;

int n, k;
int a[1000050];
set<pi> s;
set<int> pos;
multiset<int> s2;
vector<int> add[1000050];
int addnum = 0;
int need;

void split(int k){
    s2.insert(k);
    while(need){
        auto it = --s2.end();
        int i = *it;
        if(i==1) break;
        s2.erase(it);
        s2.insert(i-1);
        s2.insert(i-1);
        need--;
        //cout<<i<<' '<<i-1<<' '<<s2.size()<<endl;
    }
    for(auto i: s2) cout<<i<<' ';
}

int main()
{
	ios_base::sync_with_stdio(0); cin.tie(0);
	cin >> n >> k;
	for(int i = 0; i < n; i++){
        cin >> a[i];
        s.insert(mp(a[i],i));
        pos.insert(i);
	}

	while(1){
        auto it = s.begin();
        pi p = *it;
        //cout<<p.fi<<endl;
        if(s.size()==1){
            if(p.fi==30) break;
            else{
                for(int i = p.fi; i <= 29; i++){
                    add[p.se].pb(i);
                    addnum++;
                }
                s.erase(it);
                s.insert(mp(30,p.se));
            }
        }
        else{
            auto it2 = ++it;
            pi next = *it2;
            it--;

            auto pos1 = pos.find(p.se);
            auto pos2 = ++pos1;
            //cout<<p.fi << ' '<<next.fi<<endl;
            if(p.fi == next.fi && *pos2 == next.se){
                s.erase(it2);
                pos.erase(next.se);
                s.erase(it);
                s.insert(mp(p.fi+1, p.se));
                //cout<<"size:"<<s.size()<<endl;
            }
            else{
                add[p.se].pb(p.fi);
                addnum ++;
                s.erase(it);
                s.insert(mp(p.fi+1, p.se));
            }
        }


	}

    need = k - addnum;
    for(int i = 0; i < n; i++){
        for(int j = add[i].size()-1; j >= 0; j--){
            if(need) split(add[i][j]);
            else
                cout << add[i][j] << ' ';
        }
        cout << a[i] << ' ';
        //cout<<endl;
    }

	return 0;
}
# Verdict Execution time Memory Grader output
1 Execution timed out 1094 ms 121708 KB Time limit exceeded
2 Execution timed out 1094 ms 121744 KB Time limit exceeded
3 Execution timed out 1087 ms 122008 KB Time limit exceeded
4 Execution timed out 1094 ms 122008 KB Time limit exceeded
5 Execution timed out 1097 ms 122008 KB Time limit exceeded
6 Execution timed out 1081 ms 122008 KB Time limit exceeded
# Verdict Execution time Memory Grader output
1 Execution timed out 1067 ms 122008 KB Time limit exceeded
2 Execution timed out 1092 ms 122008 KB Time limit exceeded
3 Execution timed out 1082 ms 122012 KB Time limit exceeded
4 Execution timed out 1096 ms 122028 KB Time limit exceeded
5 Execution timed out 1087 ms 122028 KB Time limit exceeded
6 Execution timed out 1080 ms 122028 KB Time limit exceeded
7 Execution timed out 1095 ms 122028 KB Time limit exceeded
8 Execution timed out 1054 ms 122076 KB Time limit exceeded
9 Execution timed out 1078 ms 122076 KB Time limit exceeded
10 Execution timed out 1002 ms 122076 KB Time limit exceeded
11 Execution timed out 1078 ms 122076 KB Time limit exceeded
12 Correct 878 ms 122076 KB Output is correct
13 Correct 969 ms 122076 KB Output is correct
14 Correct 906 ms 122076 KB Output is correct