Submission #1007457

# Submission time Handle Problem Language Result Execution time Memory
1007457 2024-06-25T02:02:45 Z bachhoangxuan Teams (IOI15_teams) C++17
0 / 100
318 ms 167960 KB
#include "teams.h"
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e5+5;
const int maxl = 25;
int n,lt[maxn],rt[maxn];
int tree[maxn*maxl],lc[maxn*maxl],rc[maxn*maxl],T=1;
void build(int l,int r,int id){
    if(l==r) return;
    lc[id]=++T;rc[id]=++T;
    int mid=(l+r)>>1;
    build(l,mid,lc[id]);build(mid+1,r,rc[id]);
}
int update(int l,int r,int id,int p){
    if(l==r){
        tree[++T]=tree[id]+1;
        return T;
    }
    int mid=(l+r)>>1;
    int cc=++T;
    lc[cc]=lc[id];rc[cc]=rc[id];
    if(p<=mid) lc[cc]=update(l,mid,lc[id],p);
    else rc[cc]=update(mid+1,r,rc[id],p);
    tree[cc]=tree[lc[cc]]+tree[rc[cc]];
    return cc;
}
int query(int l,int r,int id,int p){
    if(l==r) return tree[id];
    int mid=(l+r)>>1;
    if(p<=mid) return query(l,mid,lc[id],p)+tree[rc[id]];
    else return query(mid+1,r,rc[id],p);
}
vector<int> e[maxn];
int root[maxn];

void init(int N, int A[], int B[]) {
    for(int i=0;i<N;i++){
        lt[B[i]]++;
        rt[A[i]]++;
        e[B[i]].push_back(A[i]);
    }
    for(int i=1;i<=N;i++) lt[i]+=lt[i-1];
    for(int i=N;i>=1;i--) rt[i]+=rt[i+1];
    n=N;
    root[0]=1;
    build(1,n,1);
    for(int i=1;i<=N;i++){
        root[i]=root[i-1];
        for(int l:e[i]) root[i]=update(1,n,root[i],l);
    }
}

int get(int l,int r){
    if(l>r) return 0;
    return query(1,n,root[r],l);
}

int can(int M, int K[]) {
    vector<int> com;
    for(int i=0;i<M;i++) com.push_back(K[i]);
    sort(com.begin(),com.end());
    com.erase(unique(com.begin(),com.end()),com.end());
    int sz=(int)com.size();
    vector<int> cnt(sz),d(sz);
    for(int i=1;i<sz;i++) d[i]=get(com[i-1]+1,com[i]-1)+d[i-1];
    for(int i=0;i<M;i++) cnt[lower_bound(com.begin(),com.end(),K[i])-com.begin()]++;
    for(int i=0;i<sz;i++){
        if(cnt[i]>n/com[i]) return 0;
        cnt[i]*=com[i];
        if(i) cnt[i]+=cnt[i-1];
        if(cnt[i]>n) return 0;
    }
    for(int i=0;i<sz;i++) for(int j=i;j<sz;j++){
        int num=n-(lt[com[i]-1]+rt[com[j]+1])-(d[j]-d[i]);
        int val=(i?cnt[j]-cnt[i-1]:cnt[j]);
        if(num<val) return 0;
    }
    return 1;
}
# Verdict Execution time Memory Grader output
1 Correct 3 ms 20828 KB Output is correct
2 Correct 3 ms 20828 KB Output is correct
3 Correct 3 ms 20828 KB Output is correct
4 Correct 3 ms 20828 KB Output is correct
5 Correct 3 ms 20828 KB Output is correct
6 Correct 3 ms 21020 KB Output is correct
7 Correct 3 ms 20828 KB Output is correct
8 Correct 3 ms 20828 KB Output is correct
9 Incorrect 3 ms 20828 KB Output isn't correct
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 32 ms 48988 KB Output is correct
2 Correct 35 ms 49012 KB Output is correct
3 Correct 33 ms 48980 KB Output is correct
4 Correct 37 ms 49928 KB Output is correct
5 Correct 18 ms 47960 KB Output is correct
6 Correct 18 ms 47792 KB Output is correct
7 Incorrect 19 ms 47964 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 44 ms 49244 KB Output is correct
2 Correct 45 ms 49264 KB Output is correct
3 Correct 52 ms 52308 KB Output is correct
4 Correct 34 ms 49884 KB Output is correct
5 Correct 52 ms 48212 KB Output is correct
6 Correct 42 ms 48212 KB Output is correct
7 Incorrect 54 ms 48324 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 310 ms 161876 KB Output is correct
2 Correct 313 ms 161876 KB Output is correct
3 Correct 318 ms 167960 KB Output is correct
4 Correct 290 ms 163024 KB Output is correct
5 Correct 213 ms 155984 KB Output is correct
6 Correct 184 ms 155980 KB Output is correct
7 Incorrect 210 ms 155988 KB Output isn't correct
8 Halted 0 ms 0 KB -