提出 #38686072
ソースコード 拡げる
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i,a,n) for (ll i=a;i<(ll)n;i++)
ll read(){ll r;scanf("%lld",&r);return r;}
int score[200010];
int quota[200010];
vector<array<int,3> >Q;
vector<ll> xval;
ll init[400010]; // {quota sum}
array<ll,2> operator+(array<ll,2>l,array<ll,2>r){ return {l[0]+r[0],l[1]+r[1]}; }
array<ll,2> operator-(array<ll,2>l,array<ll,2>r){ return {l[0]-r[0],l[1]-r[1]}; }
class Fenwick{
public:
vector<array<ll,2> > qs; // quota, score sum
vector<array<ll,2> > point; // quota, score sum
Fenwick(int sz){ // 0-index
qs.resize(sz);
point.resize(sz);
}
void add(int x,int inc){
array<ll,2> diff = {inc, inc*xval[x]};
point[x] = point[x] + diff;
for(x+=1;x<=(int)qs.size();x+=(x&-x)){
qs[x-1] = qs[x-1] + diff;
}
}
ll query(int cnt){
int x = qs.size();
ll res = 0;
for(;x;){
if(qs[x-1][0] <= cnt){
cnt -= qs[x-1][0];
res += qs[x-1][1];
x-=(x&-x);
}else{
if(point[x-1][0] <= cnt){
cnt -= point[x-1][0];
res += point[x-1][1];
x-=1;
}else{
return res += cnt*xval[x-1];
}
}
}
return cnt==0?res:-1;
}
};
int main(){
int n=read();
rep(i,0,n) {
score[i]=read(); // score
quota[i]=read(); // quota
xval.push_back(score[i]);
}
int q=read();
rep(i,0,q){
int op=read();
int x=read();
if(op==1){
int y=read();
xval.push_back(y);
Q.push_back({op,x-1,y});
}else if(op==2){
int y=read();
Q.push_back({op,x-1,y});
}else if(op==3){
Q.push_back({op,x,0});
}
}
sort(begin(xval),end(xval));
xval.erase(unique(begin(xval),end(xval)),end(xval));
auto idx=[&](int x){return lower_bound(begin(xval),end(xval),x)-begin(xval);};
Fenwick fw(xval.size());
rep(i,0,n) fw.add(idx(score[i]), quota[i]);
for(auto [op,x,y]:Q){
if(op==1){
fw.add(idx(score[x]),-quota[x]);
score[x] = y;
fw.add(idx(score[x]),quota[x]);
}else if(op==2){
fw.add(idx(score[x]),y-quota[x]);
quota[x] = y;
}else if(op==3){
printf("%lld\n", fw.query(x));
}
}
return 0;
}
提出情報
コンパイルエラー
./Main.cpp: In function ‘ll read()’:
./Main.cpp:6:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
6 | ll read(){ll r;scanf("%lld",&r);return r;}
| ~~~~~^~~~~~~~~~~
ジャッジ結果
セット名 |
Sample |
All |
得点 / 配点 |
0 / 0 |
600 / 600 |
結果 |
|
|
セット名 |
テストケース |
Sample |
00_sample_00.txt |
All |
00_sample_00.txt, 01_rnd_00.txt, 01_rnd_01.txt, 01_rnd_02.txt, 01_rnd_03.txt, 02_rnd2_00.txt, 02_rnd2_01.txt, 02_rnd2_02.txt, 02_rnd2_03.txt, 03_samet_00.txt, 03_samet_01.txt, 03_samet_02.txt, 04_samea_00.txt, 04_samea_01.txt, 04_samea_02.txt, 04_samea_03.txt, 04_samea_04.txt, 04_samea_05.txt, 05_smallb_00.txt, 05_smallb_01.txt, 05_smallb_02.txt, 05_smallb_03.txt, 06_rotate_00.txt, 06_rotate_01.txt, 06_rotate_02.txt, 06_rotate_03.txt, 07_border_00.txt, 07_border_01.txt, 07_border_02.txt, 08_smallN_00.txt, 08_smallN_01.txt, 08_smallN_02.txt, 08_smallN_03.txt, 09_hand_00.txt, 09_hand_01.txt, 09_hand_02.txt, 09_hand_03.txt, 10_worst_00.txt, 10_worst_01.txt, 10_worst_02.txt |
ケース名 |
結果 |
実行時間 |
メモリ |
00_sample_00.txt |
AC |
5 ms |
3720 KiB |
01_rnd_00.txt |
AC |
86 ms |
9700 KiB |
01_rnd_01.txt |
AC |
113 ms |
11444 KiB |
01_rnd_02.txt |
AC |
33 ms |
5316 KiB |
01_rnd_03.txt |
AC |
124 ms |
13692 KiB |
02_rnd2_00.txt |
AC |
203 ms |
18120 KiB |
02_rnd2_01.txt |
AC |
120 ms |
11696 KiB |
02_rnd2_02.txt |
AC |
105 ms |
10928 KiB |
02_rnd2_03.txt |
AC |
143 ms |
16336 KiB |
03_samet_00.txt |
AC |
175 ms |
16380 KiB |
03_samet_01.txt |
AC |
175 ms |
16500 KiB |
03_samet_02.txt |
AC |
173 ms |
16380 KiB |
04_samea_00.txt |
AC |
102 ms |
12520 KiB |
04_samea_01.txt |
AC |
105 ms |
12348 KiB |
04_samea_02.txt |
AC |
112 ms |
12408 KiB |
04_samea_03.txt |
AC |
125 ms |
12356 KiB |
04_samea_04.txt |
AC |
139 ms |
12444 KiB |
04_samea_05.txt |
AC |
154 ms |
12520 KiB |
05_smallb_00.txt |
AC |
195 ms |
19124 KiB |
05_smallb_01.txt |
AC |
195 ms |
19036 KiB |
05_smallb_02.txt |
AC |
196 ms |
19080 KiB |
05_smallb_03.txt |
AC |
192 ms |
19012 KiB |
06_rotate_00.txt |
AC |
137 ms |
20268 KiB |
06_rotate_01.txt |
AC |
143 ms |
25816 KiB |
06_rotate_02.txt |
AC |
143 ms |
25808 KiB |
06_rotate_03.txt |
AC |
131 ms |
20424 KiB |
07_border_00.txt |
AC |
208 ms |
21852 KiB |
07_border_01.txt |
AC |
209 ms |
21888 KiB |
07_border_02.txt |
AC |
214 ms |
21892 KiB |
08_smallN_00.txt |
AC |
22 ms |
4568 KiB |
08_smallN_01.txt |
AC |
14 ms |
3872 KiB |
08_smallN_02.txt |
AC |
20 ms |
3980 KiB |
08_smallN_03.txt |
AC |
42 ms |
5840 KiB |
09_hand_00.txt |
AC |
104 ms |
13032 KiB |
09_hand_01.txt |
AC |
103 ms |
13284 KiB |
09_hand_02.txt |
AC |
84 ms |
11040 KiB |
09_hand_03.txt |
AC |
174 ms |
19008 KiB |
10_worst_00.txt |
AC |
107 ms |
16480 KiB |
10_worst_01.txt |
AC |
162 ms |
16716 KiB |
10_worst_02.txt |
AC |
137 ms |
16400 KiB |