package Week1; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.StringTokenizer; /*N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b), lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。 但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗? Input 每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <= N)。 当N = 0,输入结束。 Output 每个测试实例输出一行,包括N个整数,第I个数代表第I个气球总共被涂色的次数。 3 1 1 2 2 3 3 3 1 1 1 2 1 3 0 */ /** * 差分数组,a开始b结束然后求每个球被涂几次颜色 * N个气球,声明一个一维数组N,int arr[] = new int[N+1]; a开始b结束,数组索引a标记1,b+1位置标记-1 * arr[a]++ arr[b+1]-- * for (int i = 1; i <= N; i++) { * arr[i]+=arr[i-1]; * } * 即arr[i]就为每个点图的颜色数 */ public class G_ChaFenShuZu { static int s,e; static int N; static int arr[]; public static void main(String[] args) throws Exception{ System.setIn(new FileInputStream("Solution.txt")); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); boolean flag = true; while(flag) { StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); if(N==0) { flag=false; break; } else { arr = new int[N+2]; for (int i = 1; i <= N; i++) { st = new StringTokenizer(br.readLine()); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); arr[a]++; arr[b+1]--; } for (int i = 1; i <= N; i++) { arr[i]+=arr[i-1]; System.out.print(arr[i]+" "); } System.out.print("\n"); } } } }