Submission #1220135

#TimeUsernameProblemLanguageResultExecution timeMemory
1220135m5588ohammedFortune Telling 2 (JOI14_fortune_telling2)C++20
100 / 100
2165 ms138820 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define endl "\n" const int N=(1<<20); int Tree[N*2+5][2]; int a[200005],b[200005],t[200005]; int n,q; map <int,int> key,vl; set <int> st; vector <int> query[400001]; void update1(int i,int val){ i+=N; Tree[i][0]=max(val,Tree[i][0]); i/=2; while(i!=0){ Tree[i][0]=max(Tree[i*2][0],Tree[i*2+1][0]); i/=2; } return; } void update2(int i){ i+=N; Tree[i][1]++; i/=2; while(i!=0){ Tree[i][1]=Tree[i*2][1]+Tree[i*2+1][1]; i/=2; } return; } int solve(int l1,int r1,int i,int u,int l,int r){ if(l1>r||l>r1) return 0; if(l<=l1&&r1<=r) return Tree[i][u]; int a=solve(l1,(l1+r1)/2,i*2,u,l,r); int b=solve((l1+r1)/2+1,r1,i*2+1,u,l,r); if(u==0) return max(a,b); else return a+b; } void compress(){ int idx=1; for(int i:st){ key[i]=idx; vl[idx]=i; idx++; } return; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin>>n>>q; for(int i=1;i<=n;i++) { cin>>a[i]>>b[i]; st.insert(a[i]); st.insert(b[i]); } for(int i=1;i<=q;i++){ cin>>t[i]; st.insert(t[i]); } compress(); for(int i=1;i<=n;i++) a[i]=key[a[i]]; for(int i=1;i<=n;i++) b[i]=key[b[i]]; for(int i=1;i<=q;i++){ t[i]=key[t[i]]; update1(t[i],i); } // for(int i=1;i<=n;i++) cout<<a[i]<<" "<<b[i]<<endl; // for(int i=1;i<=q;i++) cout<<t[i]<<endl; //cout<<"input finish -----------"<<endl; for(int i=1;i<=n;i++){ int idx=solve(0,N-1,1,0,min(a[i],b[i]),max(a[i],b[i])-1); //cout<<i<<" "<<idx<<endl; query[idx].push_back(i); } int sum=0; for(int i=q;i>=1;i--){ update2(t[i]); for(int idx:query[i]){ int val=solve(0,N-1,1,1,max(a[idx],b[idx]),n*2+q+1); if(val%2==0) sum+=max(vl[a[idx]],vl[b[idx]]); else sum+=min(vl[a[idx]],vl[b[idx]]); } } for(int idx:query[0]){ int val=solve(0,N-1,1,1,max(a[idx],b[idx]),n*2+q+1); if(val%2==0) sum+=vl[a[idx]]; else sum+=vl[b[idx]]; //cout<<idx<<" "<<sum<<" "<<max(a[idx],b[idx])<<endl; } cout<<sum<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...