Submission #1286071

#TimeUsernameProblemLanguageResultExecution timeMemory
1286071Faisal_Saqib운세 보기 2 (JOI14_fortune_telling2)C++20
35 / 100
3094 ms10152 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int N=2e5+100; pair<int,int> a[N]; int n,k; struct { int mxa,mxb; bool lazy=0; }seg[N*4]; // we will flip a range iff mx<=t then lazy^=1 // else We push the lazy downward void push(int v) { int lc=2*v,rc=lc+1; if(seg[v].lazy) { seg[v].lazy=0; swap(seg[v].mxa,seg[v].mxb); seg[lc].lazy=!seg[lc].lazy; seg[rc].lazy=!seg[rc].lazy; } } void Build(int l=1,int r=n,int v=1) { if(l==r) { seg[v].mxa=a[l].first; seg[v].mxb=a[l].second; return; } int m=(l+r)/2; int lc=2*v,rc=lc+1; Build(l,m,lc); Build(m+1,r,rc); seg[v].mxa=max(seg[lc].mxa,seg[rc].mxa); seg[v].mxb=max(seg[lc].mxb,seg[rc].mxb); } void Update(int&t,int l=1,int r=n,int v=1) { push(v); if(seg[v].mxa<=t) { seg[v].lazy=!seg[v].lazy; push(v); return; } if(l==r)return; int m=(l+r)/2,lc=2*v,rc=lc+1; Update(t,l,m,lc); Update(t,m+1,r,rc); seg[v].mxa=max(seg[lc].mxa,seg[rc].mxa); seg[v].mxb=max(seg[lc].mxb,seg[rc].mxb); } ll ans=0; void Answer(int l=1,int r=n,int v=1) { push(v); if(l==r) { ans+=seg[v].mxa; return; } int m=(l+r)/2; int lc=2*v,rc=lc+1; Answer(l,m,lc); Answer(m+1,r,rc); } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>k; for(int i=1;i<=n;i++) { cin>>a[i].first>>a[i].second; } sort(a+1,a+n+1); // Build(); a[n+1]=a[n+2]=a[n+3]=a[n+4]={2e9,2e9}; for(int i=1;i<=k;i++) { int t; cin>>t; for(int l=1;l<=n;l+=4) { if(a[l].first<=t) { swap(a[l].first,a[l].second); } if(a[l+1].first<=t) { swap(a[l+1].first,a[l+1].second); } if(a[l+2].first<=t) { swap(a[l+2].first,a[l+2].second); } if(a[l+3].first<=t) { swap(a[l+3].first,a[l+3].second); } } // Update(t); } for(int i=1;i<=n;i++)ans+=a[i].first; // Answer(); cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...