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 |
|
|
| 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 |