P145SUMB spoj PTIT – ROUND 5B – Sắp xếp

Nguồn đề bài: http://www.spoj.com/PTIT/problems/P145SUMB/

1. Đề bài P145SUMB spoj

Bạn có một mảng a[] gồm n phần tử, đánh số từ 1 tới n, mỗi phần tử có giá trị -1 hoặc 1.

Bạn cần phải trả lời m truy vấn. Truy vấn thứ i dạng L[i], R[i] (1 <= L[i] <= R[i] <= n), hỏi rằng liệu có cách nào để sắp xếp lại mảng a[] để a[L[i]] + a[L[i] +1] + … + a[R[i]] = 0.

Input

Dòng đầu tiên gồm 2 số nguyên n, m (1 <= n, m <= 2.10^5).

Dòng tiếp theo gồm n số của mảng a[].

m dòng tiếp theo là m truy vấn. Dòng thứ i chứa 2 số nguyên L[i], R[i] là truy vấn i.

Output

m dòng trả lời cho các truy vấn. Với mỗi truy vấn, n ra 1 nếu có, ngược lại in ra 0.

Example

Test 1:

Input:

2 3

1 -1

1 1

1 2

2 2

Output:

0

1

0

 

Test 2:

Input:

5 5

-1 1 1 1 -1

1 1

2 3

3 5

2 5

1 5

Output:

0

1

0

1

0

2. Code tham khảo p145SUMB

type    data=longint;
var
        sl1,sl2:data;
        n,m,k:data;

procedure docfile;
var     i,j,u,v:data;
	x:data;
begin

        readln(n,m);
        sl1:=0;
        for i:=1 to n do
                begin
                        read(x);
                        if x=-1 then
                                inc(sl1);
                end;
	sl2:=(n-sl1) shl 1;
	sl1:=sl1 shl 1;

        for i:=1 to m do
                begin
                        readln(u,v);
			k:=(v-u+1);
                        if k mod 2<> 0 then
                                begin
                                        writeln(0);
                                end
else
	begin
                        if (k<=sl1) and (k<=sl2) then
                                writeln(1)
                        else
                                writeln(0);
end;
                end;
end;
begin
        docfile;
end.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *