Submission #224160

#TimeUsernameProblemLanguageResultExecution timeMemory
224160errorgornFire (JOI20_ho_t5)C++14
20 / 100
669 ms80344 KiB
#pragma GCC target ("avx2") #pragma GCC optimization ("Ofast") #pragma GCC optimization ("unroll-loops") #pragma comment(linker, "/stack:200000000") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <ext/rope> using namespace std; using namespace __gnu_pbds; using namespace __gnu_cxx; #define ll long long #define ii pair<ll,ll> #define iii pair<ll,ii> #define endl '\n' #define debug(x) cout << #x << " is " << x << endl; #define rep(x,start,end) for(auto x=start-(start>end);x!=end-(start>end);x+=(start<end?1:-1)) #define all(x) x.begin(),x.end() ll MAX(ll a){return a;} ll MIN(ll a){return a;} template<typename... Args> ll MAX(ll a, Args... args) { return max(a,MAX(args...)); } template<typename... Args> ll MIN(ll a, Args... args) { return min(a,MIN(args...)); } #define indexed_set tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update> struct node{ int s,e,m; long long val=-1; node *l,*r; node(int _s,int _e){ s=_s,e=_e,m=(s+e)>>1; if (s==e){ val=0; //here the value of all points is 0 at first } else{ l=new node(s,m); r=new node(m+1,e); val=l->val+r->val; //edit this for diff } } long long query(int i,int j){ if (i==s && j==e) return val; else if (j<=m) return l->query(i,j); else if (m<i) return r->query(i,j); else return max(l->query(i,m),r->query(m+1,j)); } void update(int i, long long k){ if (s==e){ val=k; } else{ if (i<=m) l->update(i,k); else r->update(i,k); val=max(l->val,r->val); } } }*root=new node(0,200005); struct node2{ int s,e,m; vector<int> val; node2 *l,*r; node2(int _s,int _e){ s=_s,e=_e,m=(s+e)>>1; if (s!=e){ l=new node2(s,m); r=new node2(m+1,e); } } long long query(int i,int j,int k){ if (i==s && j==e){ return distance(val.begin(),upper_bound(all(val),k)); } else if (j<=m) return l->query(i,j,k); else if (m<i) return r->query(i,j,k); else return l->query(i,m,k)+r->query(m+1,j,k); } void update(int i, long long k){ val.push_back(k); if (s==e) return; else if (i<=m) l->update(i,k); else r->update(i,k); } void ss(){ sort(all(val)); if (s!=e){ l->ss(); r->ss(); } } }*root2=new node2(0,200005); int n,k; ll arr[200005]; vector<iii> q; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); bool ST2=true,ST3=true,ST4=true; cin>>n>>k; rep(x,1,n+1){ cin>>arr[x]; if (arr[x]>2) ST4=false; root->update(x,arr[x]); } int a,b,c; rep(x,0,k){ cin>>a>>b>>c; if (b!=c) ST3=false; q.push_back(iii(a,ii(b,c))); if (q[0].first!=q.back().first) ST2=false; } if (ST4){ int p=1000000000; rep(x,1,n+1){ if (arr[x]==2) p=0; else p++; root2->update(x,p); } root2->ss(); for (auto &it:q){ int twos=root2->query(it.second.first,it.second.second,it.first); cout<<it.second.second-it.second.first+1+twos<<endl; } } else if (n<=200 && k<=200){ for (auto &it:q){ ll ans=0; rep(x,it.second.first,it.second.second+1){ ans+=root->query(max(0LL,x-it.first),x); } cout<<ans<<endl; } } else if (ST3){ for (auto &it:q){ cout<<root->query(max(0LL,it.second.first-it.first),it.second.first)<<endl; } } else if (ST2){ rep(x,1,n+1) arr[x]=root->query(max(0LL,x-q[0].first),x); rep(x,1,n+1) arr[x]+=arr[x-1]; for (auto &it:q){ cout<<arr[it.second.second]-arr[it.second.first-1]<<endl; } } }

Compilation message (stderr)

ho_t5.cpp:2:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
 #pragma GCC optimization ("Ofast")
 
ho_t5.cpp:3:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
 #pragma GCC optimization ("unroll-loops")
 
ho_t5.cpp:4:0: warning: ignoring #pragma comment  [-Wunknown-pragmas]
 #pragma comment(linker, "/stack:200000000")
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...