답안 #830434

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
830434 2023-08-19T06:34:45 Z Supersonic 말 (IOI15_horses) C++14
37 / 100
436 ms 60756 KB
#include "horses.h"
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
ll h[500001];
ll x[500001];
ll y[500001];
bool subtask3=1;
int n;
set<int, greater<int>> g1;
ll tree[1048577];
pair<ll,int> ytree[1048577];
void modify(int k, int x) {
	k += n;
	tree[k] = x;
	for (k /= 2; k >= 1; k /= 2) {
		tree[k] = tree[2*k]*tree[2*k+1];
		tree[k]%=((ll)1e9+7);
	}
}
pair<ll,int> pmax(pair<ll,int> a,pair<ll,int> b){
	if(a>b) return a;
	return b;
}
ll prod(ll a, ll b) {
	a += n; b += n;
	ll s = 1;
	while (a <= b) {
		if (a%2 == 1) {s *= tree[a++];s%=((ll)1e9+7);}
		if (b%2 == 0) {s *= tree[b--];s%=((ll)1e9+7);}
		a /= 2; b /= 2;
	}
	return s;
}

void ymodify(int k, int x) {
	if(k>2*n)exit(1);
	k += n;
	ytree[k] = {x,k-n};
	for (k /= 2; k >= 1; k /= 2) {
		ytree[k] = pmax(ytree[2*k],ytree[2*k+1]);
		ytree[k].first%=((ll)1e9+7);
	}
}
pair<ll,int> rmax(ll a,ll b){
	if(b>2*n)exit(1);
	a += n; b += n;
	pair<ll,int> s = {0,0};
	while (a <= b) {
		if (a%2 == 1) {s = pmax(s,ytree[a++]);}
		if (b%2 == 0) {s = pmax(s,ytree[b--]);}
		a /= 2; b /= 2;
	}
	return s;
}


int init(int N, int X[], int Y[]) {
	n=N;
	if(n<=1000)subtask3=0;
	for(int i=0;i<n;i++){
		x[i]=X[i];
		if(x[i]<2)subtask3=0;
		modify(i,x[i]);
		y[i]=Y[i];
		ymodify(i,y[i]);
		if(x[i]>1)g1.insert(i);
	}
	//if(subtask3)exit(1);
	//cout<<rmax(2,2)<<endl;;
//for(int i=0;i<2*n;i++){cerr<<ytree[i].first<<' '<<ytree[i].second<<endl;}
	if(!subtask3){
		ll mp=0;ll c=1;
		for(int i=1;i<n;i++){
			c*=x[i];
			if(c>y[mp]||y[i]>y[mp]||c*y[i]>y[mp]){mp=i;c=1;}
		}
		return (prod(0,mp)*y[mp])%((ll)1e9+7);
	}
	else{
		ll mp=n-33;ll c=1;
		for(int i=n-32;i<n;i++){
			c*=x[i];
			if(c>y[mp]||y[i]>y[mp]||c*y[i]>y[mp]){mp=i;c=1;}
		}
		return (prod(0,mp)*y[mp])%((ll)1e9+7);
	}


	
}

int sc=500;
int updateX(int pos, int val) {	
	if(val==1&&g1.count(pos))g1.erase(pos);
	if(val>1)g1.insert(pos);
		x[pos]=val;

	sc--;
	//if(g1.empty())exit(1);
	if(sc==0){for(int i=0;i<n;i++)if(rmax(i,i).second!=i)exit(1);sc=3000;}
		modify(pos,val);

if(g1.empty()){
		int mp=rmax(0,n-1).second;
		return (prod(0,mp)*y[mp])%((ll)1e9+7);
	}

		ll c=x[0];ll mp=0;
		vector<int> vv;int cn=34;
		for(auto i:g1){vv.push_back(i);cn--;if(cn==0)break;}
		reverse(vv.begin(),vv.end());
		for(int vvi=0;vvi<vv.size();vvi++){
			int vi=vv[vvi];
			int vni=n-1;if(vvi!=vv.size()-1)vni=vv[vvi+1]-1;
			int i=rmax(vi,vni).second;
			if(i>=n)exit(1);
			c*=x[vi];
			if(c>y[mp]||y[i]>y[mp]||c*y[i]>y[mp]){mp=i;c=1;}
		}
		return (prod(0,mp)*y[mp])%((ll)1e9+7);
	
}
 
int updateY(int pos, int val) {
	
		y[pos]=val;
		ymodify(pos,val);

	if(g1.empty()){
		int mp=rmax(0,n-1).second;
		//cerr<<mp<<endl;
		return (prod(0,mp)*y[mp])%((ll)1e9+7);
	}

		ll c=x[0];ll mp=0;
		vector<int> vv;int cn=34;
		for(auto i:g1){vv.push_back(i);cn--;if(cn==0)break;}
		reverse(vv.begin(),vv.end());
		for(int vvi=0;vvi<vv.size();vvi++){
			int vi=vv[vvi];
			int vni=n-1;if(vvi!=vv.size()-1)vni=vv[vvi+1]-1;
			int i=rmax(vi,vni).second;
			if(i>=n)exit(1);
			c*=x[vi];
			if(c>y[mp]||y[i]>y[mp]||c*y[i]>y[mp]){mp=i;c=1;}
		}
		return (prod(0,mp)*y[mp])%((ll)1e9+7);
}

Compilation message

horses.cpp: In function 'void modify(int, int)':
horses.cpp:13:24: warning: declaration of 'x' shadows a global declaration [-Wshadow]
   13 | void modify(int k, int x) {
      |                    ~~~~^
horses.cpp:6:4: note: shadowed declaration is here
    6 | ll x[500001];
      |    ^
horses.cpp: In function 'void ymodify(int, int)':
horses.cpp:36:25: warning: declaration of 'x' shadows a global declaration [-Wshadow]
   36 | void ymodify(int k, int x) {
      |                     ~~~~^
horses.cpp:6:4: note: shadowed declaration is here
    6 | ll x[500001];
      |    ^
horses.cpp: In function 'std::pair<long long unsigned int, int> rmax(ll, ll)':
horses.cpp:46:6: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long unsigned int'} and 'int' [-Wsign-compare]
   46 |  if(b>2*n)exit(1);
      |     ~^~~~
horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:64:15: warning: conversion from 'll' {aka 'long long unsigned int'} to 'int' may change value [-Wconversion]
   64 |   modify(i,x[i]);
      |            ~~~^
horses.cpp:66:16: warning: conversion from 'll' {aka 'long long unsigned int'} to 'int' may change value [-Wconversion]
   66 |   ymodify(i,y[i]);
      |             ~~~^
horses.cpp:78:28: warning: conversion from 'll' {aka 'long long unsigned int'} to 'int' may change value [-Wconversion]
   78 |   return (prod(0,mp)*y[mp])%((ll)1e9+7);
      |          ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
horses.cpp:86:28: warning: conversion from 'll' {aka 'long long unsigned int'} to 'int' may change value [-Wconversion]
   86 |   return (prod(0,mp)*y[mp])%((ll)1e9+7);
      |          ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:106:28: warning: conversion from 'll' {aka 'long long unsigned int'} to 'int' may change value [-Wconversion]
  106 |   return (prod(0,mp)*y[mp])%((ll)1e9+7);
      |          ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
horses.cpp:113:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  113 |   for(int vvi=0;vvi<vv.size();vvi++){
      |                 ~~~^~~~~~~~~~
horses.cpp:115:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  115 |    int vni=n-1;if(vvi!=vv.size()-1)vni=vv[vvi+1]-1;
      |                   ~~~^~~~~~~~~~~~~
horses.cpp:121:28: warning: conversion from 'll' {aka 'long long unsigned int'} to 'int' may change value [-Wconversion]
  121 |   return (prod(0,mp)*y[mp])%((ll)1e9+7);
      |          ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:133:28: warning: conversion from 'll' {aka 'long long unsigned int'} to 'int' may change value [-Wconversion]
  133 |   return (prod(0,mp)*y[mp])%((ll)1e9+7);
      |          ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
horses.cpp:140:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  140 |   for(int vvi=0;vvi<vv.size();vvi++){
      |                 ~~~^~~~~~~~~~
horses.cpp:142:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  142 |    int vni=n-1;if(vvi!=vv.size()-1)vni=vv[vvi+1]-1;
      |                   ~~~^~~~~~~~~~~~~
horses.cpp:148:28: warning: conversion from 'll' {aka 'long long unsigned int'} to 'int' may change value [-Wconversion]
  148 |   return (prod(0,mp)*y[mp])%((ll)1e9+7);
      |          ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 308 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 1 ms 312 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 1 ms 312 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 0 ms 312 KB Output is correct
20 Correct 0 ms 312 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 312 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 320 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 1 ms 320 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 1 ms 340 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 1 ms 316 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 0 ms 212 KB Output is correct
22 Correct 1 ms 340 KB Output is correct
23 Correct 2 ms 340 KB Output is correct
24 Correct 2 ms 320 KB Output is correct
25 Correct 2 ms 468 KB Output is correct
26 Correct 2 ms 468 KB Output is correct
27 Incorrect 2 ms 340 KB Output isn't correct
28 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 317 ms 60756 KB Output is correct
2 Correct 415 ms 60624 KB Output is correct
3 Correct 397 ms 60748 KB Output is correct
4 Correct 436 ms 60664 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 240 KB Output is correct
5 Correct 0 ms 340 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 0 ms 312 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 0 ms 312 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 0 ms 340 KB Output is correct
15 Correct 0 ms 340 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 0 ms 320 KB Output is correct
19 Correct 0 ms 212 KB Output is correct
20 Correct 0 ms 212 KB Output is correct
21 Correct 0 ms 212 KB Output is correct
22 Correct 0 ms 212 KB Output is correct
23 Correct 2 ms 340 KB Output is correct
24 Correct 1 ms 340 KB Output is correct
25 Correct 1 ms 468 KB Output is correct
26 Correct 2 ms 468 KB Output is correct
27 Incorrect 1 ms 340 KB Output isn't correct
28 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 0 ms 316 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 0 ms 340 KB Output is correct
12 Correct 0 ms 316 KB Output is correct
13 Correct 0 ms 312 KB Output is correct
14 Correct 0 ms 312 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 0 ms 312 KB Output is correct
17 Correct 1 ms 340 KB Output is correct
18 Correct 0 ms 340 KB Output is correct
19 Correct 0 ms 312 KB Output is correct
20 Correct 1 ms 316 KB Output is correct
21 Correct 0 ms 212 KB Output is correct
22 Correct 0 ms 212 KB Output is correct
23 Correct 2 ms 424 KB Output is correct
24 Correct 1 ms 340 KB Output is correct
25 Correct 2 ms 468 KB Output is correct
26 Correct 2 ms 468 KB Output is correct
27 Incorrect 2 ms 340 KB Output isn't correct
28 Halted 0 ms 0 KB -