#include <cstdio> #include <cstdlib> #include <algorithm> int main(){ int n,m; scanf("%d %d",&n,&m); int first[n]; for(int i=0;i<n;i++) { scanf("%d",&first[i]); } std::vector<std::pair<std::pair<int,int>,int>> CoiKtoZmienil; for(int i=1;i<m;i++){ int d,e; scanf("%d %d",&d,&e); CoiKtoZmienil.push_back(std::make_pair(std::make_pair(n-d,i),e)); } std::sort(CoiKtoZmienil.begin(),CoiKtoZmienil.end()); int t[m]; for(int i=0;i<m;i++) t[i]=i; int tmp[m]; int i = CoiKtoZmienil[0].first.first; for(std::vector<std::pair<std::pair<int,int>,int>>::iterator it = CoiKtoZmienil.begin(); it != CoiKtoZmienil.end();){ std::vector<std::pair<int,std::pair<int,int>>> Buckets; int value = first[n-i-1]; int przedzial = 0; while(it!=CoiKtoZmienil.end() && i==((*it).first.first)){ Buckets.push_back(std::make_pair(value,std::make_pair(przedzial,(*(it)).first.second-1))); value = (*it).second; przedzial = (*(it)).first.second; it++; } Buckets.push_back(std::make_pair(value,std::make_pair(przedzial,m-1))); std::sort(Buckets.begin(),Buckets.end()); int licznik = 0; for(std::vector<std::pair<int,std::pair<int,int>>>::iterator it = Buckets.begin(); it != Buckets.end(); ++it){ for(int i=0;i<m;i++){ if(t[i]>=(*it).second.first && t[i]<=(*it).second.second) tmp[licznik++] = t[i]; } } std::copy(tmp,tmp+m,t); i=(*it).first.first; } for(int i=0;i<m;i++) printf("%d ",t[i]+1); printf("\n"); } //Author: Helena Borak
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #include <cstdio> #include <cstdlib> #include <algorithm> int main(){ int n,m; scanf("%d %d",&n,&m); int first[n]; for(int i=0;i<n;i++) { scanf("%d",&first[i]); } std::vector<std::pair<std::pair<int,int>,int>> CoiKtoZmienil; for(int i=1;i<m;i++){ int d,e; scanf("%d %d",&d,&e); CoiKtoZmienil.push_back(std::make_pair(std::make_pair(n-d,i),e)); } std::sort(CoiKtoZmienil.begin(),CoiKtoZmienil.end()); int t[m]; for(int i=0;i<m;i++) t[i]=i; int tmp[m]; int i = CoiKtoZmienil[0].first.first; for(std::vector<std::pair<std::pair<int,int>,int>>::iterator it = CoiKtoZmienil.begin(); it != CoiKtoZmienil.end();){ std::vector<std::pair<int,std::pair<int,int>>> Buckets; int value = first[n-i-1]; int przedzial = 0; while(it!=CoiKtoZmienil.end() && i==((*it).first.first)){ Buckets.push_back(std::make_pair(value,std::make_pair(przedzial,(*(it)).first.second-1))); value = (*it).second; przedzial = (*(it)).first.second; it++; } Buckets.push_back(std::make_pair(value,std::make_pair(przedzial,m-1))); std::sort(Buckets.begin(),Buckets.end()); int licznik = 0; for(std::vector<std::pair<int,std::pair<int,int>>>::iterator it = Buckets.begin(); it != Buckets.end(); ++it){ for(int i=0;i<m;i++){ if(t[i]>=(*it).second.first && t[i]<=(*it).second.second) tmp[licznik++] = t[i]; } } std::copy(tmp,tmp+m,t); i=(*it).first.first; } for(int i=0;i<m;i++) printf("%d ",t[i]+1); printf("\n"); } //Author: Helena Borak |