Submission #874156

# Submission time Handle Problem Language Result Execution time Memory
874156 2023-11-16T11:13:04 Z Mher777 Trading (IZhO13_trading) C++17
100 / 100
147 ms 19172 KB
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <iomanip>
#include <array>
#include <string>
#include <algorithm>
#include <cmath>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <bitset>
#include <list>
#include <iterator>
#include <numeric>
#include <complex>
#include <utility>
#include <random>
#include <fstream>
using namespace std;

/* -------------------- Typedefs -------------------- */

typedef int itn;
typedef long long ll;
typedef unsigned long long ull;
typedef float fl;
typedef double db;
typedef long double ld;

/* -------------------- Usings -------------------- */

using vi = vector<int>;
using vll = vector<ll>;
using mii = map<int, int>;
using mll = map<ll, ll>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

/* -------------------- Defines -------------------- */

#define ff first
#define ss second
#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define mpr make_pair
#define yes cout<<"Yes\n"
#define no cout<<"No\n"
#define all(x) (x).begin(), (x).end()

/* -------------------- Constants -------------------- */

const int MAX = int(1e9 + 5);
const ll MAXL = ll(1e18 + 5);
const ll MOD = ll(1e9 + 7);
const ll MOD2 = ll(998244353);

/* -------------------- Functions -------------------- */

void fastio() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
}

void precision(int x) {
    cout.setf(ios::fixed | ios::showpoint);
    cout.precision(x);
}

ll gcd(ll a, ll b) {
    while (b) {
        a %= b;
        swap(a, b);
    }
    return a;
}

ll lcm(ll a, ll b) {
    return a / gcd(a, b) * b;
}

ll range_sum(ll a, ll b) {
    ll dif = a - 1, cnt = b - a + 1;
    ll ans = ((b - a + 1) * (b - a + 2)) / 2;
    ans += ((b - a + 1) * dif);
    return ans;
}

string dec_to_bin(ll a) {
    string s = "";
    for (ll i = a; i > 0; ) {
        ll k = i % 2;
        i /= 2;
        char c = k + 48;
        s += c;
    }
    if (a == 0) {
        s = "0";
    }
    reverse(all(s));
    return s;
}

ll bin_to_dec(string s) {
    ll num = 0;
    for (int i = 0; i < s.size(); i++) {
        num *= 2ll;
        num += (s[i] - '0');
    }
    return num;
}

int isPrime(ll a) {
    if (a == 1) return 0;
    for (ll i = 2; i * i <= a; i++) {
        if (a % i == 0) return 0;
    }
    return 1;
}

ll binpow(ll a, ll b) {
    if (!a) return 0;
    ll ans = 1;
    while (b) {
        if (b & 1) {
            ans *= a;
        }
        b >>= 1;
        a *= a;
    }
    return ans;
}

ll binpow_by_mod(ll a, ll b, ll mod) {
    if (!a) return 0;
    ll ans = 1;
    while (b) {
        if (b & 1) {
            ans *= a;
            ans %= mod;
        }
        b >>= 1;
        a *= a;
        a %= mod;
    }
    return ans;
}

/* -------------------- Solution -------------------- */

const int N = 300005;
ll t[N * 4];
int ran[N * 4], p[N];

void bld(int l, int r, int pos) {
    ran[pos] = l;
    if (l == r) {
        p[l] = pos;
    }
    else {
        int mid = (l + r) / 2;
        bld(l, mid, 2 * pos);
        bld(mid + 1, r, 2 * pos + 1);
    }
}

void upd(int l, int r, int tl, int tr, int pos, ll val) {
    int mid = (tl + tr) / 2;
    if (l == tl && r == tr) {
        t[pos] = max(t[pos], val);
    }
    else if (mid >= r) {
        upd(l, r, tl, mid, 2 * pos, val);
    }
    else if (mid < l) {
        upd(l, r, mid + 1, tr, 2 * pos + 1, val);
    }
    else {
        upd(l, mid, tl, mid, 2 * pos, val);
        upd(mid + 1, r, mid + 1, tr, 2 * pos + 1, val + (ll)(mid - l + 1));
    }
}

ll get(int pos) {
    int ind = pos;
    pos = p[pos];
    ll ans = 0;
    while (pos) {
        if (t[pos] > 0) ans = max(ans, t[pos] + (ll)(ind - ran[pos]));
        pos /= 2;
    }
    return ans;
}

void slv() {
    int n, q;
    cin >> n >> q;
    bld(1, n, 1);
    while (q--) {
        int l, r;
        ll x;
        cin >> l >> r >> x;
        upd(l, r, 1, n, 1, x);
    }
    for (int i = 1; i <= n; i++) {
        cout << get(i) << " ";
    }
}

void cs() {
    int tstc = 1;
    //cin >> tstc;
    while (tstc--) {
        slv();
    }
}

void precalc() {
    return;
}

int main() {
    fastio();
    precalc();
    //precision(0);
    cs();
    return 0;
}

Compilation message

trading.cpp: In function 'll range_sum(ll, ll)':
trading.cpp:90:21: warning: unused variable 'cnt' [-Wunused-variable]
   90 |     ll dif = a - 1, cnt = b - a + 1;
      |                     ^~~
trading.cpp: In function 'll bin_to_dec(std::string)':
trading.cpp:113:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  113 |     for (int i = 0; i < s.size(); i++) {
      |                     ~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 1 ms 2652 KB Output is correct
7 Correct 76 ms 10884 KB Output is correct
8 Correct 93 ms 12548 KB Output is correct
9 Correct 80 ms 11600 KB Output is correct
10 Correct 82 ms 10324 KB Output is correct
11 Correct 96 ms 13132 KB Output is correct
12 Correct 105 ms 12048 KB Output is correct
13 Correct 103 ms 12996 KB Output is correct
14 Correct 109 ms 12048 KB Output is correct
15 Correct 133 ms 13524 KB Output is correct
16 Correct 118 ms 13136 KB Output is correct
17 Correct 113 ms 17036 KB Output is correct
18 Correct 140 ms 18516 KB Output is correct
19 Correct 124 ms 16980 KB Output is correct
20 Correct 147 ms 19172 KB Output is correct