Submission #401536

#TimeUsernameProblemLanguageResultExecution timeMemory
401536NhatMinh0208Floppy (RMI20_floppy)C++14
100 / 100
119 ms15976 KiB
/* Normie's Template v2.2 Changes: Added modulo binpow and inverse. */ // Standard library in one include. #include <bits/stdc++.h> using namespace std; // ordered_set library. #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; #define ordered_set(el) tree<el,null_type,less<el>,rb_tree_tag,tree_order_statistics_node_update> // AtCoder library. (Comment out these two lines if you're not submitting in AtCoder.) (Or if you want to use it in other judges, run expander.py first.) //#include <atcoder/all> //using namespace atcoder; //Pragmas (Comment out these three lines if you're submitting in szkopul.) #pragma comment(linker, "/stack:200000000") #pragma GCC optimize("Ofast,unroll-loops,tree-vectorize") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native") //File I/O. #define FILE_IN "cseq.inp" #define FILE_OUT "cseq.out" #define ofile freopen(FILE_IN,"r",stdin);freopen(FILE_OUT,"w",stdout) //Fast I/O. #define fio ios::sync_with_stdio(0);cin.tie(0);cout.tie(0) #define nfio cin.tie(0);cout.tie(0) #define endl "\n" //Order checking. #define ord(a,b,c) ((a>=b)and(b>=c)) //min/max redefines, so i dont have to resolve annoying compile errors. #define min(a,b) (((a)<(b))?(a):(b)) #define max(a,b) (((a)>(b))?(a):(b)) // Fast min/max assigns to use with AVX. // Requires g++ 9.2.0. template<typename T> __attribute__((always_inline)) void chkmin(T& a, const T& b) { a=(a<b)?a:b; } template<typename T> __attribute__((always_inline)) void chkmax(T& a, const T& b) { a=(a>b)?a:b; } //Constants. #define MOD (ll(998244353)) #define MAX 300001 #define mag 320 const long double PI=3.14159265358979; //Pairs and 3-pairs. #define p1 first #define p2 second.first #define p3 second.second #define fi first #define se second #define pii(element_type) pair<element_type,element_type> #define piii(element_type) pair<element_type,pii(element_type)> //Quick power of 2. #define pow2(x) (ll(1)<<x) //Short for-loops. #define ff(i,__,___) for(int i=__;i<=___;i++) #define rr(i,__,___) for(int i=__;i>=___;i--) //Typedefs. #define bi BigInt typedef long long ll; typedef long double ld; typedef short sh; // Binpow and stuff ll BOW(ll a, ll x, ll p) { if (!x) return 1; ll res=BOW(a,x/2,p); res*=res; res%=p; if (x%2) res*=a; return res%p; } ll INV(ll a, ll p) { return BOW(a,p-2,p); } //---------END-------// #include "floppy.h" int rmq[200001][20]; vector<int> vv; string kek; void build(int l, int r, int k) { // cout<<"build "<<l<<' '<<r<<' '<<k<<endl; if (l>r) return; kek.push_back(char(k+48)); int u=floor(log2(r-l+1)); int a=rmq[l][u]; int b=rmq[r-(1<<u)+1][u],c; if (vv[a]<vv[b]) c=b; else c=a; build(l,c-1,k^1); kek.push_back(char(k+48)); build(c+1,r,k); } void read_array(int subtask_id, const std::vector<int> &v) { int n=v.size(),i,j; vv=v; for (i=0;i<n;i++) rmq[i][0]=i; for (i=1;i<20;i++) { for (j=0;j<n;j++) { rmq[j][i]=rmq[j][i-1]; if ((j+(1<<(i-1))<n)and(vv[rmq[j][i]]<vv[rmq[j+(1<<(i-1))][i-1]])) rmq[j][i]=rmq[j+(1<<(i-1))][i-1]; } } kek=""; build(0,n-1,0); // cout<<kek<<endl; save_to_floppy(kek); } vector<int> pr; vector<int> sta; void build2(int sl, int sr, int vl, int vr, int d) { // cout<<"build2 "<<sl<<' '<<sr<<' '<<vl<<' '<<vr<<' '<<d<<endl; if ((sl>sr)or(vl>vr)) return; int a=pr[sl]; int b=vl+(a-sl-1)/2; vv[b]=-d; build2(sl+1,a-1,vl,b-1,d+1); build2(a+1,sr,b+1,vr,d+1); } std::vector<int> solve_queries(int subtask_id, int N, const std::string &bits, const std::vector<int> &a, const std::vector<int> &b) { int n=N,i,j,u,aa,bb; pr=vector<int>(2*N,0); vv=vector<int>(n,0); for (i=0;i<2*n;i++) { if ((sta.size())and(bits[sta[sta.size()-1]]==bits[i])) { pr[sta[sta.size()-1]]=i; sta.pop_back(); } else sta.push_back(i); } build2(0,2*n-1,0,n-1,0); for (i=0;i<n;i++) rmq[i][0]=i; for (i=1;i<20;i++) { for (j=0;j<n;j++) { rmq[j][i]=rmq[j][i-1]; if ((j+(1<<(i-1))<n)and(vv[rmq[j][i]]<vv[rmq[j+(1<<(i-1))][i-1]])) rmq[j][i]=rmq[j+(1<<(i-1))][i-1]; } } // for (i=0;i<n;i++) cout<<vv[i]<<' '; cout<<endl; vector<int> lol; for (i=0;i<a.size();i++) { u=floor(log2(b[i]-a[i]+1)); aa=rmq[a[i]][u]; bb=rmq[b[i]-(1<<u)+1][u]; if (vv[aa]>vv[bb]) lol.push_back(aa); else lol.push_back(bb); } return lol; }

Compilation message (stderr)

floppy.cpp:22: warning: ignoring #pragma comment  [-Wunknown-pragmas]
   22 | #pragma comment(linker, "/stack:200000000")
      | 
floppy.cpp: In function 'std::vector<int> solve_queries(int, int, const string&, const std::vector<int>&, const std::vector<int>&)':
floppy.cpp:180:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  180 |     for (i=0;i<a.size();i++)
      |              ~^~~~~~~~~
stub.cpp: In function 'void run2()':
stub.cpp:101:30: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  101 |     if (query_answers.size() != M) {
      |         ~~~~~~~~~~~~~~~~~~~~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...