Submission #676416

#TimeUsernameProblemLanguageResultExecution timeMemory
676416ziduoTenis (COI19_tenis)C++14
100 / 100
174 ms13480 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define f first #define s second const ll MOD = 1e9+7; int seg[400000][3]; void updateT(int x, int l, int r, int p, int v){ if(l==r){ seg[x][0]+=v; seg[x][1]=seg[x][0]; seg[x][2]=p; } else{ int s1=2*x, s2=2*x+1; int m = (l+r)/2; if(p<=m)updateT(s1, l, m, p, v); else updateT(s2, m+1, r, p, v); if(seg[s1][1]<=seg[s1][0]+seg[s2][1]){ seg[x][1]=seg[s1][1]; seg[x][2]=seg[s1][2]; } else{ seg[x][1]=seg[s1][0]+seg[s2][1]; seg[x][2]=seg[s2][2]; } seg[x][0]=seg[s1][0]+seg[s2][0]; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, q, v, t; cin>>n>>q; vector<int> arr[n]; int pos[n][3]; for(int i=0; i<3; i++){ for(int j=0; j<n; j++){ cin>>v; v--; arr[v].push_back(j); pos[v][i]=j; } } int sum[n]; memset(sum, -1, sizeof(sum)); for(int i=0; i<n; i++){ sort(arr[i].begin(), arr[i].end()); sum[arr[i][0]]++; } for(int i=0; i<n; i++)updateT(1, 0, n-1, i, sum[i]); for(int i=0; i<q; i++){ cin>>t; if(t==1){ cin>>v; v--; if(arr[v][0]<=seg[1][2])cout<<"DA\n"; else cout<<"NE\n"; } else{ int f, v1, v2; cin>>f>>v1>>v2; f--; v1--; v2--; updateT(1, 0, n-1, arr[v1][0], -1); updateT(1, 0, n-1, arr[v2][0], -1); int r = pos[v1][f]; for(int j=0; j<3; j++)if(arr[v1][j]==r){ arr[v1].erase(arr[v1].begin()+j); break; } arr[v1].push_back(pos[v2][f]); r=pos[v2][f]; for(int j=0; j<3; j++)if(arr[v2][j]==r){ arr[v2].erase(arr[v2].begin()+j); break; } arr[v2].push_back(pos[v1][f]); swap(pos[v1][f], pos[v2][f]); sort(arr[v1].begin(), arr[v1].end()); sort(arr[v2].begin(), arr[v2].end()); updateT(1, 0, n-1, arr[v1][0], 1); updateT(1, 0, n-1, arr[v2][0], 1); } } 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...