CSES - Datatähti Open 2019 - Results
Submission details
Task:Sunset
Sender:zscoder
Submission time:2019-01-18 09:03:10
Language:C++
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED16
#2ACCEPTED35
#3ACCEPTED49
Test results
testverdicttimegroup
#1ACCEPTED0.05 s1details
#2ACCEPTED0.04 s1details
#3ACCEPTED0.04 s1details
#4ACCEPTED0.04 s1details
#5ACCEPTED0.04 s1details
#6ACCEPTED0.04 s1details
#7ACCEPTED0.05 s1details
#8ACCEPTED0.03 s1details
#9ACCEPTED0.04 s1details
#10ACCEPTED0.03 s1details
#11ACCEPTED0.04 s1details
#12ACCEPTED0.04 s1details
#13ACCEPTED0.04 s1details
#14ACCEPTED0.04 s1details
#15ACCEPTED0.03 s1details
#16ACCEPTED0.05 s1details
#17ACCEPTED0.04 s1details
#18ACCEPTED0.04 s2details
#19ACCEPTED0.15 s2details
#20ACCEPTED0.16 s2details
#21ACCEPTED0.17 s2details
#22ACCEPTED0.15 s2details
#23ACCEPTED0.14 s2details
#24ACCEPTED0.15 s2details
#25ACCEPTED0.13 s2details
#26ACCEPTED0.16 s2details
#27ACCEPTED0.15 s2details
#28ACCEPTED0.04 s2details
#29ACCEPTED0.15 s2details
#30ACCEPTED0.14 s2details
#31ACCEPTED0.14 s2details
#32ACCEPTED0.04 s3details
#33ACCEPTED0.17 s3details
#34ACCEPTED0.16 s3details
#35ACCEPTED0.16 s3details
#36ACCEPTED0.16 s3details
#37ACCEPTED0.17 s3details
#38ACCEPTED0.16 s3details
#39ACCEPTED0.17 s3details
#40ACCEPTED0.16 s3details
#41ACCEPTED0.17 s3details
#42ACCEPTED0.15 s3details
#43ACCEPTED0.16 s3details
#44ACCEPTED0.15 s3details
#45ACCEPTED0.15 s3details
#46ACCEPTED0.14 s3details
#47ACCEPTED0.16 s3details
#48ACCEPTED0.16 s3details
#49ACCEPTED0.15 s3details
#50ACCEPTED0.14 s3details
#51ACCEPTED0.16 s3details
#52ACCEPTED0.15 s3details
#53ACCEPTED0.15 s3details
#54ACCEPTED0.15 s3details

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:133:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   while(ptr<activate.size()&&activate[ptr].fi<=l)
         ~~~^~~~~~~~~~~~~~~~

Code

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;
 
#define fi first
#define se second
#define mp make_pair
#define pb push_back
 
typedef long long ll;
typedef pair<ll,ll> ii;
typedef vector<int> vi;
typedef unsigned long long ull;
typedef long double ld; 
typedef tree<ii, null_type, less<ii>, rb_tree_tag, tree_order_statistics_node_update> pbds;

template<typename TT, int MX, int LG, ll INF> struct SparseTable //Warning : Change query return value manually if needed. INF is the dummy val
{
	TT st[LG][MX];
	TT initial[MX];
	
	TT combine(TT a, TT b) //warning : change if neccesary
	{
		if(a>b) return a;
		return b;
	}
	
	SparseTable()
	{
		for(int i = 0; i < MX; i++) initial[i] = INF;
	}
	
	void init()
	{
		for(ll j = 0; j < LG; j++)
		{
			for(ll i = 0; i < MX; i++)
			{
				st[j][i] = INF;
				if(i + (1<<j) - 1 < MX)
				{
					if(j == 0) st[j][i] = initial[i];
					else st[j][i] = combine(st[j-1][i], st[j-1][i + (1<<(j-1))]);
				}
			}
		}
	}
	
	TT query(int l, int r)
	{
		int k = 31 - __builtin_clz(r-l);
		if(l>r) return INF;
		if(l==r) k=0;
		return combine(st[k][l], st[k][r - (1<<k) + 1]);
	}
};

int L[222222];
int a[222222];
SparseTable<int,200222,18,-int(1e9)> st;
int ans[222222];

struct Fenwick
{
	vector<ll> t;
    Fenwick(int n)
    {
        t.assign(n+1,0);
    }
    void reset(int n)
    {
		t.assign(n+1, 0);
	}
    void update(int p, ll v)
    {
		p++;
        for (; p < (int)t.size(); p += (p&(-p))) t[p] += v;
    }
    ll query(int r) //finds [1, r] sum
    {                     
		r++;
        ll sum = 0;
        for (; r; r -= (r&(-r))) sum += t[r];
        return sum;
    }
    ll query(int l, int r) //finds [l, r] sum
    {
		if(l == 0) return query(r);
		return query(r) - query(l-1);
	}
};

int main()
{
	ios_base::sync_with_stdio(0); cin.tie(0);
	int n,q; cin>>n>>q;
	for(int i=0;i<n;i++) cin>>a[i];
	for(int i=0;i<n;i++) st.initial[i]=a[i];
	st.init();
	vector<ii> activate;
	for(int i=0;i<n;i++)
	{
		int lo=0; int hi=i;
		int ans=0;
		while(lo<=hi)
		{
			int mid=(lo+hi)>>1;
			if(st.query(mid,i-1)<a[i])
			{
				ans=mid;hi=mid-1;
			}
			else lo=mid+1;
		}
		L[i]=ans;
		activate.pb(mp(L[i],i));
	}
	vector<pair<ii,int> > queries;
	for(int i=0;i<q;i++)
	{
		int l,r; cin>>l>>r; l--; r--;
		queries.pb(mp(mp(l,r),i));
	}
	sort(queries.begin(),queries.end());
	Fenwick fen(n+11);
	sort(activate.begin(),activate.end());
	int ptr=0;
	for(int i=0;i<q;i++)
	{
		int l=queries[i].fi.fi; int r=queries[i].fi.se; int lab=queries[i].se;
		while(ptr<activate.size()&&activate[ptr].fi<=l)
		{
			fen.update(activate[ptr].se,1);
			ptr++;
		}
		ans[lab]=fen.query(l,r);
	}
	for(int i=0;i<q;i++)
	{
		cout<<ans[i]<<'\n';
	}
}

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
5 3
4 1 2 2 3
1 5
2 5
3 4

correct output
1
3
1

user output
1
3
1

Test 2

Group: 1

Verdict: ACCEPTED

input
1 1
1
1 1

correct output
1

user output
1

Test 3

Group: 1

Verdict: ACCEPTED

input
2 3
1 1000000000
1 1
2 2
1 2

correct output
1
1
2

user output
1
1
2

Test 4

Group: 1

Verdict: ACCEPTED

input
2 3
1000000000 1
1 1
2 2
1 2

correct output
1
1
1

user output
1
1
1

Test 5

Group: 1

Verdict: ACCEPTED

input
2000 2000
387547790 498212511 224378606 ...

correct output
14
10
10
3
7
...

user output
14
10
10
3
7
...

Test 6

Group: 1

Verdict: ACCEPTED

input
2000 2000
13604803 27447643 34139694 383...

correct output
198
43
38
58
50
...

user output
198
43
38
58
50
...

Test 7

Group: 1

Verdict: ACCEPTED

input
2000 2000
387547790 498212511 224378606 ...

correct output
1
1
1
1
1
...

user output
1
1
1
1
1
...

Test 8

Group: 1

Verdict: ACCEPTED

input
2000 2000
409666302 646936685 583741760 ...

correct output
8
9
12
8
11
...

user output
8
9
12
8
11
...

Test 9

Group: 1

Verdict: ACCEPTED

input
2000 2000
1000000000 1000000000 10000000...

correct output
1
1
1
1
1
...

user output
1
1
1
1
1
...

Test 10

Group: 1

Verdict: ACCEPTED

input
2000 2000
785263 793567 1573404 1750090 ...

correct output
2000
2000
2000
2000
2000
...

user output
2000
2000
2000
2000
2000
...

Test 11

Group: 1

Verdict: ACCEPTED

input
2000 2000
785263 793567 1573404 1750090 ...

correct output
1960
1947
1963
1942
1944
...

user output
1960
1947
1963
1942
1944
...

Test 12

Group: 1

Verdict: ACCEPTED

input
1999 2000
129087461 494922181 482953911 ...

correct output
10
6
6
7
7
...

user output
10
6
6
7
7
...

Test 13

Group: 1

Verdict: ACCEPTED

input
2000 2000
409666302 646936685 583741760 ...

correct output
8
7
6
7
7
...

user output
8
7
6
7
7
...

Test 14

Group: 1

Verdict: ACCEPTED

input
2000 2000
44989 1437234 1640005 1765235 ...

correct output
1233
1389
1026
150
796
...

user output
1233
1389
1026
150
796
...

Test 15

Group: 1

Verdict: ACCEPTED

input
2000 2000
2 1 4 3 6 5 8 7 10 9 12 11 14 ...

correct output
988
994
981
979
973
...

user output
988
994
981
979
973
...

Test 16

Group: 1

Verdict: ACCEPTED

input
2000 2000
1999 2000 1997 1998 1995 1996 ...

correct output
1
2
1
1
2
...

user output
1
2
1
1
2
...

Test 17

Group: 1

Verdict: ACCEPTED

input
2000 2000
2 1 4 3 5 4 5 2 3 1 2 1 4 3 5 ...

correct output
2
1
1
2
3
...

user output
2
1
1
2
3
...

Test 18

Group: 2

Verdict: ACCEPTED

input
1 1
1
1 1

correct output
1

user output
1

Test 19

Group: 2

Verdict: ACCEPTED

input
100000 200000
32 22 35 59 37 2 5 5 79 53 22 ...

correct output
4
9
6
5
4
...

user output
4
9
6
5
4
...

Test 20

Group: 2

Verdict: ACCEPTED

input
100000 200000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
89
35
59
25
12
...

user output
89
35
59
25
12
...

Test 21

Group: 2

Verdict: ACCEPTED

input
100000 200000
32 22 35 59 37 2 5 5 79 53 22 ...

correct output
1
1
1
1
1
...

user output
1
1
1
1
1
...

Test 22

Group: 2

Verdict: ACCEPTED

input
100000 200000
72 58 92 12 32 29 55 87 6 49 5...

correct output
5
7
5
6
2
...

user output
5
7
5
6
2
...

Test 23

Group: 2

Verdict: ACCEPTED

input
100000 200000
100 100 100 100 100 100 100 10...

correct output
1
1
1
1
1
...

user output
1
1
1
1
1
...

Test 24

Group: 2

Verdict: ACCEPTED

input
100000 200000
72 58 92 12 32 29 55 87 6 49 5...

correct output
4
7
6
7
4
...

user output
4
7
6
7
4
...

Test 25

Group: 2

Verdict: ACCEPTED

input
100000 200000
72 58 92 12 32 29 55 87 6 49 5...

correct output
5
5
5
5
5
...

user output
5
5
5
5
5
...

Test 26

Group: 2

Verdict: ACCEPTED

input
99999 200000
20 47 84 90 88 63 39 16 74 19 ...

correct output
5
7
6
3
3
...

user output
5
7
6
3
3
...

Test 27

Group: 2

Verdict: ACCEPTED

input
100000 200000
72 58 92 12 32 29 55 87 6 49 5...

correct output
6
4
9
2
5
...

user output
6
4
9
2
5
...

Test 28

Group: 2

Verdict: ACCEPTED

input
5 1
4 1 5 6 9
1 3

correct output
2

user output
2

Test 29

Group: 2

Verdict: ACCEPTED

input
100000 200000
2 1 4 3 6 5 8 7 10 9 12 11 14 ...

correct output
44
4
27
46
29
...

user output
44
4
27
46
29
...

Test 30

Group: 2

Verdict: ACCEPTED

input
100000 200000
2 1 4 3 5 4 5 2 3 1 2 1 4 3 5 ...

correct output
3
3
3
3
2
...

user output
3
3
3
3
2
...

Test 31

Group: 2

Verdict: ACCEPTED

input
100000 200000
2 1 4 3 6 5 8 7 10 9 12 11 14 ...

correct output
39
10
37
20
43
...

user output
39
10
37
20
43
...

Test 32

Group: 3

Verdict: ACCEPTED

input
1 1
1
1 1

correct output
1

user output
1

Test 33

Group: 3

Verdict: ACCEPTED

input
100000 200000
994198482 687493351 579440176 ...

correct output
8
6
8
10
5
...

user output
8
6
8
10
5
...

Test 34

Group: 3

Verdict: ACCEPTED

input
100000 200000
138644593 592364551 919805093 ...

correct output
10
11
13
7
12
...

user output
10
11
13
7
12
...

Test 35

Group: 3

Verdict: ACCEPTED

input
100000 200000
10770 195579 349462 442791 450...

correct output
2468
1986
2632
129
4010
...

user output
2468
1986
2632
129
4010
...

Test 36

Group: 3

Verdict: ACCEPTED

input
100000 200000
994198482 687493351 579440176 ...

correct output
1
2
1
2
1
...

user output
1
2
1
2
1
...

Test 37

Group: 3

Verdict: ACCEPTED

input
100000 200000
398809514 622635167 133376912 ...

correct output
15
13
16
11
17
...

user output
15
13
16
11
17
...

Test 38

Group: 3

Verdict: ACCEPTED

input
100000 200000
1000000000 1000000000 10000000...

correct output
1
1
1
1
1
...

user output
1
1
1
1
1
...

Test 39

Group: 3

Verdict: ACCEPTED

input
100000 200000
398809514 622635167 133376912 ...

correct output
10
16
7
18
10
...

user output
10
16
7
18
10
...

Test 40

Group: 3

Verdict: ACCEPTED

input
100000 200000
11465 15800 19042 19282 20348 ...

correct output
99542
99728
99391
99890
99716
...

user output
99542
99728
99391
99890
99716
...

Test 41

Group: 3

Verdict: ACCEPTED

input
99999 200000
587542096 890780320 258438313 ...

correct output
8
6
11
11
17
...

user output
8
6
11
11
17
...

Test 42

Group: 3

Verdict: ACCEPTED

input
100000 200000
11283 24634 28852 37453 37625 ...

correct output
100000
100000
100000
100000
100000
...

user output
100000
100000
100000
100000
100000
...

Test 43

Group: 3

Verdict: ACCEPTED

input
100000 200000
398809514 622635167 133376912 ...

correct output
13
13
10
15
15
...

user output
13
13
10
15
15
...

Test 44

Group: 3

Verdict: ACCEPTED

input
100000 200000
11465 15800 19042 19282 20348 ...

correct output
36112
6013
51073
8123
82052
...

user output
36112
6013
51073
8123
82052
...

Test 45

Group: 3

Verdict: ACCEPTED

input
100000 200000
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

correct output
99407
99529
99590
99589
99679
...

user output
99407
99529
99590
99589
99679
...

Test 46

Group: 3

Verdict: ACCEPTED

input
100000 200000
100000 99999 99998 99997 99996...

correct output
1
1
1
1
1
...

user output
1
1
1
1
1
...

Test 47

Group: 3

Verdict: ACCEPTED

input
100000 200000
2 1 4 3 6 5 8 7 10 9 12 11 14 ...

correct output
49946
49703
49786
49864
49720
...

user output
49946
49703
49786
49864
49720
...

Test 48

Group: 3

Verdict: ACCEPTED

input
100000 200000
99999 100000 99997 99998 99995...

correct output
2
1
2
2
1
...

user output
2
1
2
2
1
...

Test 49

Group: 3

Verdict: ACCEPTED

input
100000 200000
2 1 4 3 5 4 5 2 3 1 2 1 4 3 5 ...

correct output
3
3
3
3
2
...

user output
3
3
3
3
2
...

Test 50

Group: 3

Verdict: ACCEPTED

input
100000 200000
2 1 4 3 6 5 8 7 10 9 12 11 14 ...

correct output
19
23
2
21
4
...

user output
19
23
2
21
4
...

Test 51

Group: 3

Verdict: ACCEPTED

input
100000 200000
2 1 4 3 6 5 8 7 10 9 12 11 14 ...

correct output
112
237
49
141
57
...

user output
112
237
49
141
57
...

Test 52

Group: 3

Verdict: ACCEPTED

input
100000 200000
2 1 4 3 6 5 8 7 10 9 12 11 14 ...

correct output
2457
2199
2351
2450
2475
...

user output
2457
2199
2351
2450
2475
...

Test 53

Group: 3

Verdict: ACCEPTED

input
100000 200000
2 1 4 3 6 5 8 7 10 9 12 11 14 ...

correct output
24841
24973
24865
24823
24969
...

user output
24841
24973
24865
24823
24969
...

Test 54

Group: 3

Verdict: ACCEPTED

input
100000 200000
49999 50000 49997 49998 49995 ...

correct output
210
1
2
2
1
...

user output
210
1
2
2
1
...