CSES - E4590 2016 5 - Results
Submission details
Task:Forest
Sender:eax511
Submission time:2016-10-15 15:39:26 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.03 sdetails
#2ACCEPTED0.10 sdetails
#3ACCEPTED0.10 sdetails
#4ACCEPTED0.12 sdetails
#5ACCEPTED0.08 sdetails
#6ACCEPTED0.12 sdetails
#7ACCEPTED0.08 sdetails
#8ACCEPTED0.11 sdetails
#9ACCEPTED0.10 sdetails
#10ACCEPTED0.11 sdetails
#11ACCEPTED0.11 sdetails
#12ACCEPTED0.12 sdetails
#13ACCEPTED0.13 sdetails
#14ACCEPTED0.16 sdetails
#15ACCEPTED0.15 sdetails
#16ACCEPTED0.13 sdetails
#17ACCEPTED0.14 sdetails
#18ACCEPTED0.16 sdetails
#19ACCEPTED0.16 sdetails
#20ACCEPTED0.17 sdetails
#21ACCEPTED0.17 sdetails
#22ACCEPTED0.16 sdetails
#23ACCEPTED0.13 sdetails
#24ACCEPTED0.17 sdetails
#25ACCEPTED0.14 sdetails
#26ACCEPTED0.12 sdetails
#27ACCEPTED0.10 sdetails
#28ACCEPTED0.09 sdetails
#29ACCEPTED0.13 sdetails
#30ACCEPTED0.08 sdetails
#31ACCEPTED0.04 sdetails
#32ACCEPTED0.03 sdetails

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:47:23: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d",&n,&q);
                       ^
input/code.cpp:51:41: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d %lf %lf",&a,&h,&pl,&pr);
                                         ^
input/code.cpp:61:26: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %lf",&x,&v);
                          ^

Code

#include <stdio.h>
#include <algorithm>
using namespace std;
#define N (1<<14)
double st[N<<1];
void update(int i, int j,double v){
  i+=N;
  j+=N;
  if(i==j){
    st[i]*=v;
    return;
  }
  st[i]*=v;
  st[j]*=v;
  while((i>>1)!=(j>>1)){
    if(~i&1)st[i|1]*=v;
    if(j&1)st[j&~1]*=v;
    i>>=1,j>>=1;
  }
}
double query(int a){
  int i = N+a;
  double ri = 1;
  while(i>0){
    ri*=st[i],i>>=1;
  }
  return ri;
}

struct{
  int a;
  int b;
  double v;
} md[202020];

struct qr_t{
  int a;
  double v;
  bool operator<(const qr_t& o) const{return a<o.a;}
} qr[10101];

int mdc=0,qrc=0;

int main(){
  int n,q;
  for(int i=0;i<(N<<1);i++)st[i]=1;
  scanf("%d %d",&n,&q);
  for(int i=0;i<n;++i){
    int a,h;
    double pl,pr;
    scanf("%d %d %lf %lf",&a,&h,&pl,&pr);
    pl/=100;
    pr/=100;
    md[mdc++] = {a-h,a-1,1-pl};
    md[mdc++] = {a+1,a+h,1-pr};
  }
  double r=0;
  for(int i=0;i<q;++i){
    int x;
    double v;
    scanf("%d %lf",&x,&v);
    qr[qrc++]={x,v};
  }
  std::sort(qr,qr+qrc);
  for(int i=0;i<mdc;++i){
    int a=0,b=qrc,c;
    while(b-a>1)c=(a+b)>>1,(md[i].a<=qr[c].a?b:a)=c;
    if(md[i].a>qr[a].a)a++;
    if(a==qrc)continue;
    if(qr[a].a>md[i].b)continue;
    int s = a;
    a=0,b=qrc;
    while(b-a>1)c=(a+b)>>1,(md[i].b<qr[c].a?b:a)=c;
    if(md[i].b<qr[a].a)--a;
    if(a<0)continue;
    if(s>a)continue;
    if(qr[a].a<md[i].a)continue;
    if(qr[s].a>md[i].b)continue;
    update(s,a,md[i].v);
  }
  for(int i=0;i<qrc;++i)r+=query(i)*qr[i].v;
  printf("%.15lf\n",r);
  return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
1 10000
-102082010 194749759 64 27
-169360811 358
359126034 730
-287313697 384
...

correct output
4609458.5100000035018

user output
4609458.510000001639128

Test 2

Verdict: ACCEPTED

input
100000 10000
0 1 88 2
0 1 63 28
0 1 52 43
0 1 17 55
...

correct output
4972578

user output
4972578.000000000000000

Test 3

Verdict: ACCEPTED

input
100000 10000
0 9 1 31
0 4 23 35
0 9 0 31
0 3 19 25
...

correct output
5087113

user output
5087113.000000000000000

Test 4

Verdict: ACCEPTED

input
100000 10000
0 4 34 37
0 8 63 19
0 92 8 51
0 34 48 23
...

correct output
5008738

user output
5008738.000000000000000

Test 5

Verdict: ACCEPTED

input
100000 10000
0 258 60 40
0 518 49 48
0 136 3 45
0 537 21 54
...

correct output
4973582

user output
4973582.000000000000000

Test 6

Verdict: ACCEPTED

input
100000 10000
0 8216 0 85
0 7923 2 10
0 7717 6 6
0 5850 11 56
...

correct output
4996873

user output
4996873.000000000000000

Test 7

Verdict: ACCEPTED

input
100000 10000
0 61439 52 13
0 31641 81 19
0 52991 24 73
0 74428 59 25
...

correct output
4981920

user output
4981920.000000000000000

Test 8

Verdict: ACCEPTED

input
100000 10000
0 588352 21 36
0 697995 49 32
0 743909 22 55
0 307377 26 33
...

correct output
4972641

user output
4972641.000000000000000

Test 9

Verdict: ACCEPTED

input
100000 10000
0 5653692 8 69
0 9357432 11 34
0 1050285 53 26
0 2776597 62 23
...

correct output
4972878

user output
4972878.000000000000000

Test 10

Verdict: ACCEPTED

input
100000 10000
0 17600178 5 21
0 99902608 43 31
0 88368971 1 65
0 71931544 29 1
...

correct output
5028303

user output
5028303.000000000000000

Test 11

Verdict: ACCEPTED

input
100000 10000
0 188985228 13 35
0 15802601 6 84
0 748803313 4 85
0 287562630 27 15
...

correct output
5003777

user output
5003777.000000000000000

Test 12

Verdict: ACCEPTED

input
100000 10000
0 153546899 42 12
-1 389479397 79 7
0 853802244 69 31
0 870268645 23 47
...

correct output
0

user output
0.000000000000000

Test 13

Verdict: ACCEPTED

input
100000 10000
1 982453016 66 21
9 715621763 7 3
-8 738921209 4 14
-1 867559303 19 68
...

correct output
0

user output
0.000000000000000

Test 14

Verdict: ACCEPTED

input
100000 10000
-8 231075202 33 42
-64 539079444 47 40
-3 913277554 27 72
64 876390450 39 40
...

correct output
0

user output
0.000000000000000

Test 15

Verdict: ACCEPTED

input
100000 10000
-822 640687527 23 10
-63 950992174 45 54
-326 556836776 3 42
476 660842352 25 46
...

correct output
0

user output
0.000000000000000

Test 16

Verdict: ACCEPTED

input
100000 10000
7130 403956088 6 36
-126 45945666 6 26
547 342334298 81 15
3570 301443877 26 12
...

correct output
0

user output
0.000000000000000

Test 17

Verdict: ACCEPTED

input
100000 10000
-79428 461497679 37 2
-42424 58244371 5 45
-29468 880365708 5 86
61735 295975187 38 29
...

correct output
0

user output
0.000000000000000

Test 18

Verdict: ACCEPTED

input
100000 10000
208306 586056116 64 14
-284428 573846943 53 2
-291410 239961140 23 57
948909 246295319 79 17
...

correct output
0

user output
0.000000000000000

Test 19

Verdict: ACCEPTED

input
100000 10000
9520619 407909315 20 34
4343857 436518415 12 73
2074712 319882284 38 35
8482234 982127039 2 77
...

correct output
0

user output
0.000000000000000

Test 20

Verdict: ACCEPTED

input
100000 10000
-15539984 929303404 80 15
96892144 254449084 30 49
93514243 579711370 36 21
-48237130 818395027 44 25
...

correct output
0

user output
0.000000000000000

Test 21

Verdict: ACCEPTED

input
100000 10000
855342311 491522208 29 7
881646558 966041363 67 20
89636039 486326665 83 7
-334997833 924006860 15 46
...

correct output
0

user output
0.000000000000000

Test 22

Verdict: ACCEPTED

input
100000 10000
-244523365 24261145 4 71
905282537 99635911 38 46
328378018 12716414 48 22
-490263671 71879670 67 13
...

correct output
0

user output
0.000000000000000

Test 23

Verdict: ACCEPTED

input
100000 10000
-309176321 7931344 44 11
670761661 4871588 16 77
-877291566 3991335 2 43
467750447 9956482 90 0
...

correct output
0

user output
0.000000000000000

Test 24

Verdict: ACCEPTED

input
100000 10000
885376769 348428 8 66
-355427923 400403 22 24
-77457635 135948 1 80
-187549451 497296 41 49
...

correct output
0.18573908352633872187

user output
0.185739083530784

Test 25

Verdict: ACCEPTED

input
100000 10000
-831679450 979 93 0
830009187 56718 28 49
411212346 88038 26 38
563910477 10089 37 14
...

correct output
928215.57279065309558

user output
928215.572790651349351

Test 26

Verdict: ACCEPTED

input
100000 10000
835756750 5979 28 12
-224114814 5606 58 26
454282261 6626 27 35
506622396 3092 35 40
...

correct output
4227165.671246830374

user output
4227165.671246830374002

Test 27

Verdict: ACCEPTED

input
100000 10000
316659941 123 0 3
617314355 33 60 35
-827504504 535 17 78
-855931189 531 50 17
...

correct output
4913283.3702000044286

user output
4913283.370199998840690

Test 28

Verdict: ACCEPTED

input
100000 10000
76318568 33 28 6
117791067 46 10 1
-840649145 17 19 26
-72446718 32 38 1
...

correct output
4965081.359999999404

user output
4965081.359999999403954

Test 29

Verdict: ACCEPTED

input
100000 10000
-438062424 7 27 33
843193716 8 82 0
-516237151 5 31 10
-586574881 10 2 96
...

correct output
5032129.6899999994785

user output
5032129.689999999478459

Test 30

Verdict: ACCEPTED

input
100000 10000
96882823 1 20 58
-505818489 1 18 45
333830058 1 52 38
-857687471 1 34 5
...

correct output
5031672.2599999997765

user output
5031672.259999999776483

Test 31

Verdict: ACCEPTED

input
1 1
2 2 50 50
1 1

correct output
0.5

user output
0.500000000000000

Test 32

Verdict: ACCEPTED

input
2 1
2 2 50 50
4 2 50 50
3 1

correct output
0.25

user output
0.250000000000000