Submission #209781

#TimeUsernameProblemLanguageResultExecution timeMemory
209781Alexa2001Pilot (NOI19_pilot)C++17
89 / 100
1028 ms107880 KiB
#include <bits/stdc++.h>

using namespace std;

/// 16:02

typedef long long ll;
const int Nmax = 1e6 + 5;

ll act = 0;

vector<int> v[Nmax], w[Nmax];
int n, q;
ll ans[Nmax];


int t[Nmax], sz[Nmax];


ll take2(int x)
{
    return (ll)x*(x+1)/2;
}

int boss(int x)
{
    if(x == t[x]) return x;
    return t[x] = boss(t[x]);
}

void unite(int x, int y)
{
    x = boss(x); y = boss(y);

    act -= take2(sz[y]) + take2(sz[x]);

    if(sz[x] > sz[y]) swap(x, y);
    t[x] = y;
    sz[y] += sz[x];

    act += take2(sz[y]);
}

void add(int x)
{
    sz[x] = 1; t[x] = x;
    ++act;

    if(sz[x-1]) unite(x, x-1);
    if(sz[x+1]) unite(x, x+1);
}

const int bsize = 1 << 18;
char buffer[bsize+2]; int cursor;


static inline void init_read()
{
    fread(buffer, 1, bsize, stdin), cursor = 0;
}

template<typename T>
void read(T &x)
{
    x = 0;
    while(!isdigit(buffer[cursor]))
    {
        ++cursor;
        if(cursor == bsize) init_read();
    }
    while(isdigit(buffer[cursor]))
    {
        x = x * 10 + buffer[cursor] - '0';
        ++cursor;
        if(cursor == bsize) init_read();
    }
}

int main()
{
  //  freopen("input", "r", stdin);
    cin.sync_with_stdio(false); cin.tie(0);

    init_read();
    read(n); read(q);

    int i;
    for(i=1; i<=n; ++i)
    {
        int x;
        read(x);
        w[x].push_back(i);
    }

    for(i=1; i<=q; ++i)
    {
        int x;
        read(x);
        v[x].push_back(i);
    }

    for(i=1; i<=Nmax-5; ++i)
    {
        for(auto it : w[i]) add(it);
        for(auto it : v[i]) ans[it] = act;
    }

    for(i=1; i<=q; ++i) printf("%lld\n", ans[i]);

    return 0;
}

Compilation message (stderr)

pilot.cpp: In function 'void init_read()':
pilot.cpp:59:35: warning: ignoring return value of 'size_t fread(void*, size_t, size_t, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
     fread(buffer, 1, bsize, stdin), cursor = 0;
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...