Submission #999725

#TimeUsernameProblemLanguageResultExecution timeMemory
999725modwweFish 3 (JOI24_fish3)C++17
0 / 100
459 ms96060 KiB
///https://www.instagram.com/_modwwe/ #include<bits/stdc++.h> //#define int long long //#define ll long long #define down cout<<'\n'; #define NHP ios_base::sync_with_stdio(0);cout.tie(0);cin.tie(0); #define modwwe int t;cin>>t; while(t--) #define bit(i,j) (i>>j&1) #define sobit(a) __builtin_popcountll(a) #define task "test" #define fin(x) freopen(x".inp","r",stdin) #define fou(x) freopen(x".ans","w",stdout) #define pb push_back #define checktime cerr << (double)clock() / CLOCKS_PER_SEC * 1000 << " ms"; using namespace std; void phongbeo(); const int mod2=1e9+7; const int mod1=998244353; struct icd { int a,b; }; struct ib { int a; int b; }; struct ic { int a,b,c; }; struct id { int a,b,c,d; }; struct ie { int a,b,c, d,e,f; }; int n,m,s1,s2,s4,s3,sf,k,r,mid,s5,s6,mx,s7,s8,s9,mx2,res,dem2=0,dem=0,l; int i,s10,s12; int el=29; main() { #ifndef ONLINE_JUDGE //fin(task),fou(task); #endif NHP /// cin>>s1; // modwwe phongbeo(),down } struct IT {int t[1200000]; void upd(int node,int l,int r,int l1,int r1,int x) { if(l>r1||r<l1) return ; if(l>=l1&&r<=r1){t[node]+=x; return;} int mid=l+r>>1; upd(node<<1,l,mid,l1,r1,x); upd(node<<1|1,mid+1,r,l1,r1,x); t[node]=t[node<<1]+t[node<<1|1]; } int get(int node,int l,int r,int l1,int r1) { if(l>r1||r<l1) return 0; if(l>=l1&&r<=r1) return t[node]; int mid=l+r>>1; return get(node<<1,l,mid,l1,r1)+get(node<<1|1,mid+1,r,l1,r1); } }st1,st2; ib st[19][300001]; vector<ic> v[300002]; int a[300001]; int b[300001]; int c[300001]; int ans[300001]; vector<ib> v2[300001]; int get(int l,int r) { int k=log2(r-l+1); return min(st[k][l].a,st[k][r-(1<<k)+1].a); } int get2(int l,int r) { int k=log2(r-l+1); if(st[k][r-(1<<k)+1].a<=st[k][l].a) return st[k][r-(1<<k)+1].b; return st[k][l].b; } void solve() { for(int i=1; i<=n; i++) { l=1; r=i; while(l<=r) { int mid=l+r>>1; if(get(mid,i)==a[i]) r=mid-1; else l=mid+1; } s2=(a[i]-a[r])*r; s3=a[i]-a[r]; v[i].pb({i,s2,s3}); l=i+1; r=n; while(l<=r) { int mid=l+r>>1; if(a[i]<get(i+1,mid))l=mid+1; else r=mid-1; } v[l].pb({i,-s2,-s3}); } } void phongbeo() { cin>>n>>k; for(int i=1; i<=n; i++) cin>>a[i]; for(int i=1; i<=n; i++) { if(a[i-1]%k>a[i]%k)b[i]++; b[i]+=b[i-1]; } for(int i=1; i<=n; i++) a[i]=a[i]/k-b[i],st[0][i].a=a[i],st[0][i].b=i,c[i]=c[i-1]+a[i]; for(int i=1; i<19; i++) for(int j=1; j<=n; j++) if(st[i-1][j+(1<<(i-1))].a<=st[i-1][j].a)st[i][j]=st[i-1][j+(1<<(i-1))]; else st[i][j]=st[i-1][j]; solve(); cin>>m; for(int i=1; i<=m; i++) { cin>>l>>r; v2[r].pb({l,i}); } for(int i=1; i<=n; i++) { for(auto x:v[i]) st1.upd(1,1,n,x.a,x.a,x.b), st2.upd(1,1,n,x.a,x.a,x.c); for(auto x:v2[i]) { s3=get(x.a,i); s3+=b[x.a]; if(s3<0) ans[x.b]=-1; else { s4=c[i]-c[x.a-1]; s4+=b[x.a]*(i-x.a+1); s4-=s3*(i-x.a+1); s5=get2(x.a,i); s4+=st1.get(1,1,n,s5+1,i); s4-=n*st2.get(1,1,n,s5+1,i); ans[x.b]=s4; } } } for(int i=1; i<=m; i++) cout<<ans[i],down }

Compilation message (stderr)

Main.cpp:44:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   44 | main()
      | ^~~~
Main.cpp: In member function 'void IT::upd(int, int, int, int, int, int)':
Main.cpp:61:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   61 |          int mid=l+r>>1;
      |                  ~^~
Main.cpp: In member function 'int IT::get(int, int, int, int, int)':
Main.cpp:70:20: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   70 |           int mid=l+r>>1;
      |                   ~^~
Main.cpp: In function 'void solve()':
Main.cpp:100:22: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  100 |             int mid=l+r>>1;
      |                     ~^~
Main.cpp:111:22: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  111 |             int mid=l+r>>1;
      |                     ~^~
#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...