Submission #59921843


Source Code Expand

// #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
#include <bits/stdc++.h>
using namespace std;
#define REP_(I,N) for (int I=0,END=(N);I<END;I++)
#define rREP_(I,N) for (int I=(N)-1;I>=0;I--)
#define rep_(I,S,N) for (int I=(S),END=(N);I<END;I++)
#define rrep_(I,S,N) for (int I=(N)-1,START=(S);I>=START;I--)
#define FOR_(I,S,N) for (int I=(S),END=(N);I<=END;I++)
#define rFOR_(I,S,N) for (int I=(N),START=(S);I>=START;I--)

#define DEBUG
#ifdef DEBUG
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define deputs(str) fprintf(stderr, "%s\n",str)
#else
#define debug(...)
#define deputs(str)
#endif // DEBUG
typedef unsigned long long ULL;
typedef unsigned long long ull;
typedef long long LL;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const int INF=0x3f3f3f3f;
const LL INFF=0x3f3f3f3f3f3f3f3fll;
const LL maxn=1e6+7;
const double pi=acos(-1.0);
const double eps=1e-10;
template<typename T>inline void pr2(T x,int k=64) {REP_(i,k) printf("%d",(x>>i)&1); putchar(' ');}
template<typename T>inline void max_(T &A,T B) {(A<B) &&(A=B);}
template<typename T>inline void min_(T &A,T B) {(A>B) &&(A=B);}
inline ll fastgcd(ll a, ll b) {  // __gcd()
    if (!b) return a;
    ll az=__builtin_ctzll(a),bz=__builtin_ctzll(b),z=min(az,bz),diff; b>>=bz;
    while (a) {
        a>>=az, diff=b-a, az=__builtin_ctzll(diff);
        (b>a)&&(b=a), a=abs(diff);
    }
    return b<<z;
}
int startTime;
void startTimer() {startTime=clock();}
void printTimer() {debug("/--- Time: %ld milliseconds ---/\n",clock()-startTime);}
typedef array<int,5> ar5;
typedef array<int,4> ar4;
typedef array<int,3> ar3;
std::mt19937 rng(time(0));
std::mt19937_64 rng64(time(0));
vector<pii> direction4 = {{-1,0},{0,-1},{0,1},{1,0}};
vector<pii> direction8 = {{-1,-1},{-1,0},{1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};

// const int mod = 1e9+7;
const int mod=998244353;
struct mint {
    long long x;
    mint():x(0) {}
    mint(long long x):x((x%mod+mod)%mod) {}
    // mint(long long x):x(x){}
    mint &fix() { x = (x%mod+mod)%mod; return *this; }
    mint operator-() const { return mint(0) - *this; }
    mint operator~() const { return mint(1) / *this; }
    mint &operator+=(const mint &a) { if ((x+=a.x)>=mod) x-=mod; return *this; }
    mint &operator-=(const mint &a) { if ((x+=mod-a.x)>=mod) x-=mod; return *this; }
    mint &operator*=(const mint &a) { (x*=a.x)%=mod; return *this; }
    mint &operator/=(const mint &a) { (x*=a.pow(mod-2).x)%=mod; return *this; }
    mint operator+(const mint &a)const { return mint(*this) += a; }
    mint operator-(const mint &a)const { return mint(*this) -= a; }
    mint operator*(const mint &a)const { return mint(*this) *= a; }
    mint operator/(const mint &a)const { return mint(*this) /= a; }
    mint pow(long long t) const {
        mint ret=1,cur=x;
        for (; t; t>>=1ll,cur=cur*cur)
            if (t&1) ret=ret*cur;
        return ret;
    }
    bool operator<(const mint &a)const { return x < a.x; }
    bool operator==(const mint &a)const { return x == a.x; }
};
istream & operator>>(istream &o,mint &a) { o>>a.x; a=a.fix(); return o; }
ostream & operator<<(ostream &o,const mint &a) { o<<a.x; return o; }

int A[maxn],B[maxn];
int solve() {
    set<pii> S;
    multiset<int> diff;
    int n;
    scanf("%d",&n);
    FOR_(i,1,n) scanf("%d",&A[i]);
    FOR_(i,1,n) scanf("%d",&B[i]);
    FOR_(i,1,n) S.insert({A[i],A[i]});
    FOR_(i,1,n) S.insert({B[i],B[i]});
    REP_(i,(int)S.size()) diff.insert(0);
    auto Update=[&](int index,int R) { // position<index: R
        auto it=S.lower_bound({index+1,-1});
        if (it==S.end()||it->second>=R) return;
        int last=it->first;
        // printf("start update %d %d\n",index,R);
        // start from index
        if (index!=-1&&(it==S.begin()||prev(it)->first<index)) {
            pii cur={index,it->second};
            diff.erase(diff.find(it->second-it->first));
            S.erase(it);
            diff.insert(cur.second-cur.first);
            S.insert(cur);
        } else {
            diff.erase(diff.find(it->second-it->first));
            S.erase(it);
        }
        it=S.lower_bound({index+1,-1});
        while (it!=S.end()&&it->second<R) {
            // printf("solve value=%d %d; size=%d %d;; \n",it->first,it->second,S.size(),diff.size());
            last=it->first;
            diff.erase(diff.find(it->second-it->first));
            it=S.erase(it);
        }
        if (it==S.end()||it->second>R) {
            diff.insert(R-last);
            S.insert({last,R});
        }
    };
    FOR_(i,1,n) {
        if (A[i]>B[i]) swap(A[i],B[i]);
        Update(-1,A[i]);
        Update(A[i],B[i]);
        Update(B[i],2e9);

        // for (auto p:S) printf("{%d->%d} ",p.first,p.second); puts("<- S-range");
        // for (auto p:diff) printf("%d ",p); puts("<- distance");

        printf("%d\n",*(diff.begin()));
    }
    return 0;
}
int main() {
    // ios_base::sync_with_stdio(false);
    // cin.tie(0), cout.tie(0);
    int T = 1;
    // cin>>T;
    // scanf("%d",&T);
    startTimer();
    FOR_(_, 1, T) { solve(); }
    // printTimer();
}
/*
*/

Submission Info

Submission Time
Task D - Many Easy Optimizations
User zlc1114
Language C++ 20 (gcc 12.2)
Score 900
Code Size 5351 Byte
Status AC
Exec Time 2116 ms
Memory 103784 KiB

Compile Error

Main.cpp: In function ‘int solve()’:
Main.cpp:89:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   89 |     scanf("%d",&n);
      |     ~~~~~^~~~~~~~~
Main.cpp:90:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   90 |     FOR_(i,1,n) scanf("%d",&A[i]);
      |                 ~~~~~^~~~~~~~~~~~
Main.cpp:91:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   91 |     FOR_(i,1,n) scanf("%d",&B[i]);
      |                 ~~~~~^~~~~~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 900 / 900
Status
AC × 2
AC × 68
Set Name Test Cases
Sample 00_sample_01.txt, 00_sample_02.txt
All 00_sample_01.txt, 00_sample_02.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt, 01_test_37.txt, 01_test_38.txt, 01_test_39.txt, 01_test_40.txt, 01_test_41.txt, 01_test_42.txt, 01_test_43.txt, 01_test_44.txt, 01_test_45.txt, 01_test_46.txt, 01_test_47.txt, 01_test_48.txt, 01_test_49.txt, 01_test_50.txt, 01_test_51.txt, 01_test_52.txt, 01_test_53.txt, 01_test_54.txt, 01_test_55.txt, 01_test_56.txt, 01_test_57.txt, 01_test_58.txt, 01_test_59.txt, 01_test_60.txt, 01_test_61.txt, 01_test_62.txt, 01_test_63.txt, 01_test_64.txt, 01_test_65.txt, 01_test_66.txt
Case Name Status Exec Time Memory
00_sample_01.txt AC 1 ms 3876 KiB
00_sample_02.txt AC 1 ms 3904 KiB
01_test_01.txt AC 1207 ms 103220 KiB
01_test_02.txt AC 1141 ms 103180 KiB
01_test_03.txt AC 1124 ms 103260 KiB
01_test_04.txt AC 1137 ms 103168 KiB
01_test_05.txt AC 1180 ms 103268 KiB
01_test_06.txt AC 1131 ms 103264 KiB
01_test_07.txt AC 1103 ms 103168 KiB
01_test_08.txt AC 1139 ms 103172 KiB
01_test_09.txt AC 1068 ms 103192 KiB
01_test_10.txt AC 1143 ms 103264 KiB
01_test_11.txt AC 1035 ms 103200 KiB
01_test_12.txt AC 1137 ms 103276 KiB
01_test_13.txt AC 1084 ms 103388 KiB
01_test_14.txt AC 1053 ms 103448 KiB
01_test_15.txt AC 1094 ms 103636 KiB
01_test_16.txt AC 686 ms 73064 KiB
01_test_17.txt AC 135 ms 22432 KiB
01_test_18.txt AC 268 ms 36644 KiB
01_test_19.txt AC 119 ms 20840 KiB
01_test_20.txt AC 841 ms 79892 KiB
01_test_21.txt AC 1222 ms 103244 KiB
01_test_22.txt AC 1236 ms 103620 KiB
01_test_23.txt AC 1213 ms 103672 KiB
01_test_24.txt AC 1215 ms 103048 KiB
01_test_25.txt AC 1227 ms 103228 KiB
01_test_26.txt AC 1227 ms 103564 KiB
01_test_27.txt AC 1204 ms 103640 KiB
01_test_28.txt AC 1206 ms 103456 KiB
01_test_29.txt AC 1224 ms 103564 KiB
01_test_30.txt AC 1219 ms 103376 KiB
01_test_31.txt AC 1893 ms 103308 KiB
01_test_32.txt AC 1883 ms 103324 KiB
01_test_33.txt AC 1928 ms 103320 KiB
01_test_34.txt AC 2011 ms 103784 KiB
01_test_35.txt AC 1834 ms 103596 KiB
01_test_36.txt AC 1929 ms 103728 KiB
01_test_37.txt AC 1828 ms 103256 KiB
01_test_38.txt AC 2063 ms 103456 KiB
01_test_39.txt AC 1966 ms 103336 KiB
01_test_40.txt AC 2116 ms 103396 KiB
01_test_41.txt AC 1095 ms 103228 KiB
01_test_42.txt AC 1078 ms 103160 KiB
01_test_43.txt AC 1128 ms 103300 KiB
01_test_44.txt AC 1115 ms 103208 KiB
01_test_45.txt AC 1115 ms 103300 KiB
01_test_46.txt AC 1101 ms 103280 KiB
01_test_47.txt AC 1117 ms 103216 KiB
01_test_48.txt AC 1130 ms 103264 KiB
01_test_49.txt AC 1125 ms 103612 KiB
01_test_50.txt AC 1099 ms 103416 KiB
01_test_51.txt AC 1266 ms 103488 KiB
01_test_52.txt AC 1229 ms 103576 KiB
01_test_53.txt AC 1273 ms 103692 KiB
01_test_54.txt AC 1194 ms 103424 KiB
01_test_55.txt AC 1259 ms 103220 KiB
01_test_56.txt AC 1218 ms 103652 KiB
01_test_57.txt AC 1283 ms 103684 KiB
01_test_58.txt AC 1195 ms 103612 KiB
01_test_59.txt AC 1280 ms 103508 KiB
01_test_60.txt AC 1217 ms 103228 KiB
01_test_61.txt AC 2 ms 3616 KiB
01_test_62.txt AC 1 ms 3728 KiB
01_test_63.txt AC 1 ms 3868 KiB
01_test_64.txt AC 75 ms 7600 KiB
01_test_65.txt AC 100 ms 7764 KiB
01_test_66.txt AC 97 ms 7832 KiB