답안 #763688

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
763688 2023-06-22T15:44:19 Z HoriaHaivas Pilot (NOI19_pilot) C++14
18 / 100
25 ms 6416 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;
      |               ^
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 6 ms 388 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 6 ms 400 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 6 ms 388 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 6 ms 400 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Runtime error 2 ms 468 KB Execution killed with signal 6
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 6 ms 388 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 6 ms 400 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Runtime error 2 ms 468 KB Execution killed with signal 6
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 6 ms 388 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 6 ms 400 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Runtime error 2 ms 468 KB Execution killed with signal 6
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 3400 KB Output is correct
2 Correct 19 ms 3532 KB Output is correct
3 Correct 18 ms 3356 KB Output is correct
4 Correct 17 ms 3164 KB Output is correct
5 Correct 17 ms 3360 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 21 ms 6352 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 25 ms 6416 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 6 ms 388 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 6 ms 400 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Correct 19 ms 3400 KB Output is correct
12 Correct 19 ms 3532 KB Output is correct
13 Correct 18 ms 3356 KB Output is correct
14 Correct 17 ms 3164 KB Output is correct
15 Correct 17 ms 3360 KB Output is correct
16 Correct 17 ms 3328 KB Output is correct
17 Correct 18 ms 3424 KB Output is correct
18 Correct 18 ms 3564 KB Output is correct
19 Correct 17 ms 3268 KB Output is correct
20 Correct 18 ms 3412 KB Output is correct
21 Correct 19 ms 3272 KB Output is correct
22 Correct 21 ms 3340 KB Output is correct
23 Correct 19 ms 3540 KB Output is correct
24 Correct 18 ms 3316 KB Output is correct
25 Correct 18 ms 3384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 6 ms 388 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 6 ms 400 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Runtime error 2 ms 468 KB Execution killed with signal 6
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 6 ms 388 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 6 ms 400 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Runtime error 2 ms 468 KB Execution killed with signal 6
12 Halted 0 ms 0 KB -