Title: public key box
Problem description
In one school, teachers share N classrooms. According to the regulations, all keys must be placed in the public key box. Teachers cannot take keys home. Every time before class, the teacher finds the key of his classroom from the public key box to open the door. After class, he puts the key back in the key box.
The key box has n hooks in a row from left to right, which are used to hang the keys of N classrooms. There is no fixed hanging position for a bunch of keys, but there is a sign on the keys, so teachers won't confuse the keys.
Every time they take the key, the teachers will find the key they need and take it away without moving other keys. Every time you return the key, the teacher who returns the key will find the empty hook on the far left and hang the key on the hook. If more than one teacher returns the key, they return it in the order of key number from small to large. If both teachers return the key and take the key at the same time, the teachers will return all the keys first and then take them out.
At the beginning of today, the keys were placed in the key box in the order of number from small to large. There are K teachers to attend class. Give the keys required by each teacher, the time to start class and the length of class. Assuming that the time after class is the time to return the keys, what is the order of the keys in the final key box?
Input format
The first line of input contains two integers N, K.
The next K lines are three integers W, s and C in each line, which respectively represent the key number to be used by a teacher, the time to start class and the length of class. There may be multiple teachers using the same key, but the time when teachers use the key will not overlap.
Ensure that the input data meets the input format. You don't have to check the legitimacy of the data.
Output format
Output a line containing N integers separated by a space between adjacent integers to represent the key number hung on each hook in turn.
sample input
5 2
4 3 3
2 2 7
sample output
1 4 3 2 5
Example description
The first teacher used the key of classroom 4 from time 3 and used 3 units of time, so he returned the key at time 6. The second teacher used the key from time 2 and used 7 units of time, so he returned the key at time 9.
The key status after each critical moment is as follows (X indicates empty):
1X345 after time 2;
1X3X5 after time 3;
143X5 after time 6;
14325 after time 9.
sample input
5 7
1 1 14
3 3 12
1 15 12
2 7 20
3 18 12
4 21 19
5 30 9
sample output
1 2 3 5 4
Scale and agreement of evaluation cases
For 30% of the evaluation cases, 1 ≤ N, K ≤ 10, 1 ≤ w ≤ N, 1 ≤ s, c ≤ 30;
For 60% of the evaluation cases, 1 ≤ N, K ≤ 50, 1 ≤ w ≤ N, 1 ≤ s ≤ 300, 1 ≤ c ≤ 50;
For all evaluation cases, 1 ≤ N, K ≤ 1000, 1 ≤ w ≤ N, 1 ≤ s ≤ 10000, 1 ≤ c ≤ 100.
Solution:
#include<iostream> #include<cmath> #include<cstring> #include<algorithm> using namespace std; struct te{//teacher int sta,end,x;//Start time, end time, key number }; bool cmp1(te x1,te x2){ return x1.sta<x2.sta; } bool cmp2(te x1,te x2){ if(x1.end==x2.end) { return x1.x<x2.x; }else return x1.end<x2.end; } int main(){ int n,k,a,b,c; int time=10100; cin>>n>>k; int key[n+1]; te tea1[k],tea2[k]; for(int i=1;i<=n;i++){ key[i]=i; } for(int i=0;i<k;i++){ cin>>a>>b>>c; tea1[i].x=a;tea1[i].sta=b;tea1[i].end=b+c; tea2[i].x=a;tea2[i].sta=b;tea2[i].end=b+c; } sort(tea1,tea1+k,cmp1); sort(tea1,tea1+k,cmp2); for(int i=1;i<=time;i++){ for(int j=0;j<k;j++){//Return the key if(tea2[j].end==i){ for(int k1=1;k1<=n;k1++){ if(key[k1]==-1){ key[k1]=tea2[j].x; break; } } } if(tea2[j].end>i) break; } //Take the key for(int j=0;j<k;j++){ if(tea1[j].sta==i){ for(int k1=1;k1<=n;k1++){ if(key[k1]==tea1[j].x) { key[k1]=-1; break; } } } if(tea1[j].sta>i) break; } } for(int i=1;i<=n;i++){ cout<<key[i]<<" "; } }