답안 #1049252

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1049252 2024-08-08T15:28:13 Z Newtonabc Meteors (POI11_met) C++14
74 / 100
1084 ms 43476 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];
long long p[N],a[N],fw[N],s[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 6 ms 29272 KB Output is correct
2 Correct 5 ms 29276 KB Output is correct
3 Correct 6 ms 29276 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 29272 KB Output is correct
2 Correct 5 ms 29276 KB Output is correct
3 Correct 5 ms 29312 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 80 ms 30196 KB Output is correct
2 Correct 182 ms 32084 KB Output is correct
3 Correct 104 ms 31732 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 137 ms 31312 KB Output is correct
2 Correct 144 ms 31284 KB Output is correct
3 Correct 180 ms 32340 KB Output is correct
4 Correct 21 ms 31068 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 111 ms 30544 KB Output is correct
2 Correct 177 ms 32596 KB Output is correct
3 Correct 128 ms 29272 KB Output is correct
4 Correct 102 ms 32180 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 173 ms 29820 KB Output is correct
2 Correct 175 ms 31312 KB Output is correct
3 Correct 89 ms 30188 KB Output is correct
4 Correct 153 ms 33308 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1084 ms 43476 KB Output is correct
2 Incorrect 708 ms 32372 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 952 ms 42064 KB Output is correct
2 Incorrect 671 ms 32220 KB Output isn't correct
3 Halted 0 ms 0 KB -