답안 #1049251

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1049251 2024-08-08T15:27:46 Z Newtonabc Meteors (POI11_met) C++14
74 / 100
923 ms 42052 KB
#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10;
const int M=3e5+5;
int o[N],al[N],ar[N],mid[N],l[N],r[N],s[N];
long long p[N],a[N],fw[N];
vector<int> ask[N];
vector<int> own[N];

void update(int idx,long long val){
	if(idx==0) return;
	while(idx<=M){
		fw[idx]+=val;
		idx+=idx & -idx;
	}
}

long long read(int idx){
	long long sum=0;
	while(idx>0){
		sum+=fw[idx];
		idx-=idx & -idx;
	}
	return sum;
}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int n,m,k;
	cin>>n >>m;
	for(int i=1;i<=m;i++) cin>>o[i],own[o[i]].push_back(i);
	for(int i=1;i<=n;i++) cin>>p[i];
	cin>>k;
	for(int i=1;i<=k;i++) cin>>al[i] >>ar[i] >>a[i];
	for(int i=1;i<=n;i++) l[i]=1,r[i]=k;
	while(true){
		bool up=false;
		for(int i=1;i<=k;i++) ask[i].clear();
		for(int i=1;i<=n;i++) mid[i]=(l[i]+r[i])/2,ask[mid[i]].push_back(i);
		for(int i=0;i<=M;i++) fw[i]=0;
		for(int i=1;i<=k;i++){
			if(al[i]<=ar[i]) update(al[i],a[i]),update(ar[i]+1,-1*a[i]);
			else update(al[i],a[i]),update(m+1,-1*a[i]),update(1,a[i]),update(ar[i]+1,-1*a[i]);
			for(int j=0;j<ask[i].size();j++){
				int u=ask[i][j];
				long long sum=0;
				for(int x=0;x<own[u].size();x++){
					sum+=read(own[u][x]);
				}
				if(sum>=p[u]){
					if(r[u]!=mid[u]) up=true;
					r[u]=mid[u];
				}
				else{
					if(l[u]!=mid[u]+1) up=true;
					l[u]=mid[u]+1;
				}
			}
		}
		if(!up) break;
	}
	for(int i=0;i<=M;i++) fw[i]=0;
	for(int i=1;i<=k;i++){
		if(al[i]<=ar[i]) update(al[i],a[i]),update(ar[i]+1,-1*a[i]);
		else update(al[i],a[i]),update(m+1,-1*a[i]),update(1,a[i]),update(ar[i]+1,-1*a[i]);
		for(int j=0;j<ask[i].size();j++){
			int u=ask[i][j];
			long long sum=0;
			for(int x=0;x<own[u].size();x++){
				sum+=read(own[u][x]);
			}
			s[u]=sum;
		}
	}
	for(int i=1;i<=n;i++){
		if(s[i]<p[i]) cout<<"NIE";
		else cout<<l[i];
		cout<<"\n";
	}
}

Compilation message

met.cpp: In function 'int main()':
met.cpp:45:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |    for(int j=0;j<ask[i].size();j++){
      |                ~^~~~~~~~~~~~~~
met.cpp:48:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 |     for(int x=0;x<own[u].size();x++){
      |                 ~^~~~~~~~~~~~~~
met.cpp:67:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   67 |   for(int j=0;j<ask[i].size();j++){
      |               ~^~~~~~~~~~~~~~
met.cpp:70:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |    for(int x=0;x<own[u].size();x++){
      |                ~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 27332 KB Output is correct
2 Correct 6 ms 27228 KB Output is correct
3 Correct 5 ms 27228 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 27352 KB Output is correct
2 Correct 5 ms 27228 KB Output is correct
3 Correct 5 ms 27228 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 82 ms 30100 KB Output is correct
2 Correct 184 ms 31700 KB Output is correct
3 Correct 110 ms 31460 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 136 ms 31080 KB Output is correct
2 Correct 139 ms 30972 KB Output is correct
3 Correct 199 ms 31912 KB Output is correct
4 Correct 24 ms 28764 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 113 ms 30348 KB Output is correct
2 Correct 178 ms 32436 KB Output is correct
3 Correct 126 ms 29400 KB Output is correct
4 Correct 108 ms 31824 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 167 ms 29592 KB Output is correct
2 Correct 171 ms 31012 KB Output is correct
3 Correct 91 ms 29780 KB Output is correct
4 Correct 152 ms 33104 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 923 ms 42052 KB Output is correct
2 Incorrect 716 ms 30876 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 908 ms 40928 KB Output is correct
2 Incorrect 683 ms 31116 KB Output isn't correct
3 Halted 0 ms 0 KB -