Submission #1140154

#TimeUsernameProblemLanguageResultExecution timeMemory
1140154MuhammadSaramFlooding Wall (BOI24_wall)C++20
0 / 100
1 ms328 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int mod = 1e9 + 7; signed main() { int n; cin>>n; map<int,vector<int>> ind; int a[n],b[n]; for (int i=0;i<n;i++) cin>>a[i]; for (int i=0;i<n;i++) cin>>b[i]; int mx=0,ans=0; vector<int> ve; for (int i=0;i<n;i++) { ind[a[i]].push_back(i); ind[b[i]].push_back(i); if (a[i]>b[i]) swap(a[i],b[i]); mx=max(mx,a[i]); ve.push_back(b[i]); } sort(ve.begin(),ve.end()); for (int i=0;i<n;i++) { int vl=1,id=0; for (auto [x,v]:ind) { while (id<n && ve[id]<x) vl=vl*2,vl-=(vl>=mod?mod:0),id++; if (x<mx) continue; int q=1,w=1; bool e=0,r=0; for (int j:v) { if (j==i) continue; if (j<i) { if (b[j]==x) q=q*2,q-=(q>=mod?mod:0); else e=1; } else { if (b[j]==x) w=w*2,w-=(w>=mod?mod:0); else r=1; } } int vl1=vl; if (e) vl1=vl1*q%mod; else vl1=vl1*(q-1)%mod; if (r) vl1=vl1*w%mod; else vl1=vl1*(w-1)%mod; ans+=(x-a[i])*vl1%mod; if (x>b[i]) ans+=(x-b[i])*vl1%mod; } } cout<<ans<<endl; return 0; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...