Submission #763687

# Submission time Handle Problem Language Result Execution time Memory
763687 2023-06-22T15:43:41 Z HoriaHaivas Pilot (NOI19_pilot) C++14
0 / 100
22 ms 6356 KB
/*
    "TLE is like the wind, always by my side"
    - Yasuo - 2022 -
*/
#include <bits/stdc++.h>
#define debug(x) cerr << #x << " " << x << "\n"
#define debugs(x) cerr << #x << " " << x << " "
#pragma GCC optimize("Ofast")
#define int long long

using namespace std;

struct number
{
    int val;
    int poz;
};

number v[2000001];
bool enable[2000001];
int ans[2000001];
int query[2000001];
int originalquery[2000001];
int cardinal[2000001];
int root[2000001];
int total;

bool cmp (number a, number b)
{
    if (a.val!=b.val)
    return a.val<b.val;
    else
    return a.poz<b.poz;
}

void unite(int a, int b)
{
    if (cardinal[a]>cardinal[b])
        swap(a,b);
    root[a]=root[b];
    cardinal[b]+=cardinal[a];
    cardinal[a]=cardinal[b];
}

int searchset(int a)
{
    if (root[a]==a)
        return a;
    root[a]=searchset(root[a]);
    return root[a];
}

void update(int index)
{
    enable[index]=1;
    root[index]=index;
    cardinal[index]=1;
    int enter;
    enter=0;
    if (enable[index-1])
    {
        enter++;
    }
    if (enable[index+1])
    {
        enter++;
    }
    if (enter==0)
        total++;
    if (enter==1)
    {
        if (enable[index-1])
        {
            total+=cardinal[searchset(index-1)]+1;
            unite(searchset(index-1),searchset(index));
        }
        else
        {
            total+=cardinal[searchset(index+1)]+1;
            unite(searchset(index+1),searchset(index));
        }
    }
    if (enter==2)
    {
        total-=cardinal[searchset(index-1)]*(cardinal[searchset(index-1)]+1)/2;
        total-=cardinal[searchset(index+1)]*(cardinal[searchset(index+1)]+1)/2;
        unite(searchset(index-1),searchset(index));
        unite(searchset(index+1),searchset(index));
        total+=cardinal[searchset(index)]*(cardinal[searchset(index)]+1)/2;
    }
}

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n,q,i,j,cnt;
    cin >> n >> q;
    for (i=1; i<=n; i++)
    {
        cin >> v[i].val;
        v[i].poz=i;
    }
    for (i=1;i<=q;i++)
    {
         cin >> originalquery[i];
         query[i]=originalquery[i];
    }
    sort(query+1,query+1+q);
    for (i=1;i<=q;i++)
         assert(query[i]==query[i+1]);
    sort(v+1,v+1+n,cmp);
    cnt=1;
    while (query[cnt]<v[1].val)
           cnt++;
    total=0;
    for (i=1; i<=n; i++)
    {
        update(v[i].poz);
        if (v[i].val!=v[i+1].val && (query[cnt]>=v[i].val && (i==n || query[cnt]<v[i+1].val)))
        {
            ans[query[cnt]]=total;
            cnt++;
        }
    }
    for (i=1;i<=q;i++)
    {
         if (originalquery[i]<=v[n].val)
         cout << ans[originalquery[i]] << "\n";
         else
         cout << total << "\n";
    }
}

Compilation message

pilot.cpp: In function 'int main()':
pilot.cpp:98:15: warning: unused variable 'j' [-Wunused-variable]
   98 |     int n,q,i,j,cnt;
      |               ^
# Verdict Execution time Memory Grader output
1 Runtime error 2 ms 468 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 2 ms 468 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 2 ms 468 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 2 ms 468 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 9 ms 3604 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 21 ms 6320 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 22 ms 6356 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 2 ms 468 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 2 ms 468 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 2 ms 468 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -